MyBatis-获取参数

news2024/12/26 13:46:17

1. 创建MyBatis配置文件模板

  1. 编辑完Mybatis核心配置文件和properties文件后,打开IDEA的设置界面,找到Editor中的File and Code Templates,点击加号新增模板。在这里插入图片描述
  2. 接着将编辑好的核心配置文件中的内容复制粘贴到空白框中,设置好模板名等内容即可。在这里插入图片描述
  3. 接下来右键点击,选择new,就能直接使用创建好的模板了。在这里插入图片描述

2. 创建映射文件的模板

照着上述步骤来即可。
在这里插入图片描述

3. 创建工具类来完成获得mapper对象的功能

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class SqlSessionUtils {

    public static SqlSession getSqlSession() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory build = sqlSessionFactoryBuilder.build(resourceAsStream);
        return build.openSession(true);
    }

}

在这里插入图片描述

4. MyBatis获取参数的两种方式

MyBatis由两种方式来获取参数:

  • ${}:本质为字符串拼接,需要注意sql注入问题
  • #{}:本质为占位符复制

4.1 传入单个字面值

    <!--根据id查询用户
        当传入单个字面值时,可以使用任意名称来获取参数值,
        因为传参不以参数名为准,而是以位置为准
        要注意${}方法的单引号问题-->
    <select id="getUserById" resultType="User">
        <!--使用#{},可以用任意名称接收参数甚至是字面值-->
        <!--select * from user where id=#{2};-->
        <!--使用${},可以使用任意名称接收参数,但需要注意双引号,否则会报错
            因为此方法为字符串拼接,如果参数是字符串类型,那么拼接后的字符串不带引号,所以会报错-->
        select * from user where id='${2}'
    </select>

4.2 传入多个字面值

    <!--当传入多个字面值时,mybatis会将这些参数放在一个map集合中
        以arg0,arg1...(或param1,param2...)为键,参数值为值
        所以要通过map中的键来获取相应的值-->
    <select id="getUserByUsernameAndAge" resultType="User">
        <!--根据map中的键来获取参数值-->
        <!--select * from user where username=#{arg0} and age=#{param2}-->
        select * from user where username='${param1}' and age=${arg1}
    </select>

4.3 自定义Map传入

    <!--可以自己将传入的参数放在一个map集合中,就可以使用自定义的键来获取参数值了-->
    <insert id="insertUser">
        <!--insert into user values (#{id},#{username},#{password},#{age},#{sex},#{email})-->
        insert into user values (${id},'${username}','${password}',${age},'${sex}','${email}')
    </insert>
    @Test
    public void test4() throws IOException {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        Map<String,Object> map = new HashMap<>();
        map.put("id",4);
        map.put("username","hellen");
        map.put("password","12386kk");
        map.put("age",22);
        map.put("sex","女");
        map.put("email","jn@asd.com");
        Integer i = mapper.insertUser(map);
        System.out.println(i);
    }

4.4 传入实体类对象

    <!--当传入参数为实体对象时,可以通过属性名直接获取属性值
        要注意,在这里的属性实际上不需要对象中必须有对应字段
        只要有相应的get方法,去掉get后将首字母小写,得到的就是属性名,这个属性值就可以通过属性名获取-->
    <insert id="insertUserByClass">
        <!--insert into user values (#{id},#{username},#{password},#{age},#{sex},#{email})-->
        insert into user values (${id},'${username}','${password}',${age},'${sex}','${email}');
    </insert>
    @Test
    public void test5() throws IOException {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        Integer i = mapper.insertUserByClass(new
                User(6, "jcack", "aasddscx", 33, '女'));
        System.out.println(i);
    }

4.5 使用@Param注解命名参数

    <!--当使用了@Param注解命名了参数后,
    多个参数在map中就以自定义的名称为键(或param1,param2...为键),参数值为值
    在获取参数时可以直接使用自定义的参数名获取-->
    <select id="getUserByUsernameAndSex" resultType="User">
        select * from user where username=#{username} and sex='${param2}'
    </select>

5.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1467434.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android进阶之旅(第5天)

充实的一天又过去了&#xff0c;今天真的好冷啊&#xff0c;我们这里雪很大&#xff0c;早上最傻逼的决定就是穿了一个短的棉袜出来&#xff0c;漏脚踝&#xff0c;冷成傻子 接下来老规矩&#xff0c;看下昨天计划的完成情况&#xff1a; 今日计划&#xff1a; 1.过bug 2.看…

python 提取PDF文字

使用pdfplumber&#xff0c;不能提取扫描的pdf和插入的图片。 import pdfplumberfile_path rD:\UserData\admindesktop\官方文档\1903_Mesh-Models-Overview_FINAL.pdf with pdfplumber.open(file_path) as pdf:page pdf.pages[0]print(page.extract_text()) # 所以文字prin…

Vulnhub靶机:DC9

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;DC9&#xff08;10.0.2.62&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/dc-9,412/…

k8s的svc流量通过iptables和ipvs转发到pod的流程解析

文章目录 1. k8s的svc流量转发1.1 service 说明1.2 endpoints说明1.3 pod 说明1.4 svc流量转发的主要工作 2. iptables规则解析2.1 svc涉及的iptables链流程说明2.2 svc涉及的iptables规则实例2.2.1 KUBE-SERVICES规则链2.2.2 KUBE-SVC-EFPSQH5654KMWHJ5规则链2.2.3 KUBE-SEP-L…

基于JAVA的二手车交易系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手车档案管理模块2.3 车辆预约管理模块2.4 车辆预定管理模块2.5 车辆留言板管理模块2.6 车辆资讯管理模块 三、系统设计3.1 E-R图设计3.2 可行性分析3.2.1 技术可行性分析3.2.2 操作可行性3.2.3 经济…

基于java Springboot实现教务管理系统

基于java Springboot实现教务管理系统《视频版-建议收藏》 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文…

cmake 项目。qt5升级 qt6 报错 error: “Qt requires a C++17 compiler 已解决

日常项目开发中。需要对qt5升级到qt6 做cmake兼容配置&#xff0c;在编译中发现&#xff0c;有c 编译环境 报错 2>C:\Qt\6.5.3\msvc2019_64\include\QtCore/qcompilerdetection.h(1226,1): fatal error C1189: #error: "Qt requires a C17 compiler, and a suitable …

容器_Docker ( 06 )

容器_Docker ( 05 ) Kubernetes 资源对象管理 资源对象文件 模板与帮助信息 资源对象文件优势 命令无法实现高级复杂的功能某些资源对象使用命令无法创建方便管理 , 保存 , 追溯历史 资源对象文件太长 , 记不住怎么办 使用命令创建模板查询帮助信息查询官方手册 生成资源…

数据价值在线化丨TiDB 在企查查数据中台的应用及 v7.1 版本升级体验

本文介绍了企查查在数据中台建设中使用 TiDB 的经验和应用。通过从 MySQL 到 TiDB 的迁移&#xff0c;企查查构建了基于 TiDB Flink 的实时数仓框架 &#xff0c;充分利用了 TiDB 的分布式架构、MySQL 兼容性和完善的周边工具等特性&#xff0c;实现了数据的在线化处理。2023 年…

构建生物医学知识图谱from zero to hero (3):生物医学命名实体识别和链接

生物医学实体链接 🤓现在是激动人心的部分。对于NLP和命名实体识别和链接的新手,让我们从一些基础知识开始。命名实体识别技术用于检测文本中的相关实体或概念。例如,在生物医学领域,我们希望在文本中识别各种基因、药物、疾病和其他概念。 生物医学概念提取 在这个例子中…

C++入门学习(三十六)函数的声明

程序是自上而下运行的&#xff0c;比如我下面的代码&#xff1a; #include <iostream> #include<string> using namespace std;int main() { int a1; int b2;int sumaddNumbers(a,b); cout<<sum;return 0; }int addNumbers(int a, int b) { int sum …

一种基于javax.max注解的能力增强技术

目录 现有框架的不足之处 我的改进内容 改进的成果 现有框架的不足之处 Max是javax.validation包中的一个常用注解&#xff0c;用于对传入参数进行最大值校验。但是其校验区间为闭区间&#xff0c;且不支持修改&#xff0c;如&#xff1a;Max(2)&#xff0c;表示表示传入参…

Debug|百度OCR识别错误error_code: 216205

1. 什么错误 在使用百度OCR识别时遇到了错误error_code: 216205。 参照文档【百度OCR文字识别 - API文档 - 错误码】中的描述&#xff0c;是我的图片转base64后大于10M 测试两张图片&#xff1a;923k图片的Base64 大于 10M&#xff1b;2M图片的Base64 小于 10M。 # 电脑上看…

抖音视频下载工具|视频内容提取软件

引言部分&#xff1a; 针对抖音视频下载需求&#xff0c;我们团队自豪推出一款功能强大的工具&#xff0c;旨在解决用户获取抖音视频繁琐问题的困扰。我们通过基于C#开发的工具&#xff0c;让用户能够轻松通过关键词搜索实现自动批量抓取视频&#xff0c;并根据需求进行选择性批…

yolov8-seg dnn调用

接上篇一直更换torch、opencv版本都无法解决这个问题&#xff08;seg调用dnn报错&#xff09;。那问题会不会出在yolov8源码本身呢。yolov8的讨论区基本都看过了&#xff0c;我决定尝试在其前身yolov5的讨论区上找找我不信没人遇到这个问题。很快找到下面的讨论第一个帖子&…

Node.JS入门(day01)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈 一、为什么要学习Node.JS ①可以让其他人访问我们编写的网页 ②为后续的框架学习打基础 二、Node.JS是什么 官方&#xff1a;Node.js是一个…

8.qt5使用opencv的库函数打开图片

1.配置opencv动态库的环境变量 2.在创建的qt工程中加入如下opencv代码&#xff0c;具体代码如下&#xff1a; 使用opencv库函数显示图片

编写LLVM Pass的一个小问题

在阅读官方文档时发现一个很有趣的细节&#xff0c;官方给出了一个测试用例&#xff0c;此处有一个小问题&#xff08;%无法复制&#xff09;。但是我在使用自己编译的ll文件时&#xff0c;我发现该pass无法正常使用。最后经过测试发现是利用-O0编译产生的ll文件有optnone的fla…

数据库管理-第154期 Oracle Vector DB AI-06(20240223)

数据库管理154期 2024-02-23 数据库管理-第154期 Oracle Vector DB & AI-06&#xff08;20240223&#xff09;1 环境准备创建表空间及用户TNSNAME配置 2 Oracle Vector的DML操作创建示例表插入基础数据DML操作UPDATE操作DELETE操作 3 多Vector列表4 固定维度的向量操作5 不…

【达梦数据库】数据库的方言问题导致的启动失败

问题场景 在项目中采用了hibernate &#xff0c;连接数据库原本为ORACLE&#xff0c;后续打算改造为国产数据库 达梦 链接配置&#xff1a; # 达梦写法&#xff0c; index:driver-class-name: dm.jdbc.driver.DmDriverjdbc-url: jdbc:dm://192.168.220.225:5236/IDX4username:…