⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 blog.csdn.net/qq_53317005/article/details/129762660 「会洗碗的CV工程师」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

一、使用#定义参数

1. 持久层接口添加根据名字内容模糊查询方法

// 根据名字内容模糊查询
List<User> findByNameLike(String username);

2. UserMapper.xml映射文件添加标签

<!-- 使用#定义参数 -->
<select id="findByNameLike" parameterType="string"
resultType="com.mybatisstudy.pojo.User">
select * from user where username like #{name}
</select>

我们看到在映射文件中,parameterType的值为 string 而没有写java.lang.String ,这是为什么呢?参数/返回值类型为基本数据类型/包装类/String等类型时,我们可以写全类名,也可以写别名。

下表就是一些数据类型对应的别名

数据类型 别名
byte _byte
long _long
short _short
int _int
int _integer
double _double
float _float
boolean _boolean
String string
Byte byte
Long long
Short short
Interger int / interger
Double double
Float float
Boolean boolean
Date date
BigDecimal decimal / bigdecimal
Object object
Map map
HashMap hashmap
List list
ArrayList arraylist
Collection collection
Iterator iterator

3. 添加测试方法

// 测试根据名字模糊查询
@Test
public void testFindByNameLike(){
String like = "%l%";
List<User> list = userMapper.findByNameLike(like);

list.forEach(System.out::println);
}

4. 运行结果

OK,这里是成功查询出来了,并且控制台打印日志也和我们的参数一致

二、使用$定义参数

模糊查询如果不想在调用方法时参数加%,可以使用拼接参数的方式设置Sql:

1. UserMapper.xml映射文件更改标签内容

<!-- 使用$定义参数 -->
<select id="findByNameLike" resultType="com.mybatisstudy.pojo.User" parameterType="string">
select * from user where username like '%${value}%'
</select>

2. 修改测试方法

// 测试根据名字模糊查询
@Test
public void testFindByNameLike(){
String like = "l";
List<User> list = userMapper.findByNameLike(like);

list.forEach(System.out::println);
}

3. 运行结果

#和$的区别:

  • #表示sql模板的占位符,$表示将字符串拼接到sql模板中。
  • #可以防止sql注入,一般能用#就不用$
  • ${}内部的参数名必须写value。

三、使用<bind>标签定义参数

如果使用 # 还不想在调用方法的参数中添加 %,可以使用 <bind><bind> 允许我们在 Sql语句以外创建一个变量,并可以将其绑定到当前的Sql语句中。用法如下:

1. UserMapper.xml映射文件更改标签内容

<!-- 使用<bind>标签定义参数 -->
<select id="findByNameLike" parameterType="String" resultType="com.mybatisstudy.pojo.User">
<bind name="likeName" value="'%' + username + '%'"/>
select * from user where username like #{likeName}
</select>

2. 运行结果

四、聚合查询

1. 持久层接口添加查询所有用户个数方法

// 查询用户总数
int findCount();

2. UserMapper.xml添加标签

<!-- 聚合查询 -->
<select id="findCount" resultType="int">
select count(id) from user
</select>

3. 添加测试方法

// 测试聚合查询方法
@Test
public void testFindCount(){
System.out.println(userMapper.findCount());
}

4. 运行结果

还是比较可靠的,确实查询出来了用户总数

五、主键回填

有时我们需要获取新插入数据的主键值。如果数据库中主键是自增的,这时我们就需要使用MyBatis的主键回填功能。

1. 持久层接口添加新增用户方法

// 主键回填-新增用户
void add2(User user);

2. UserMapper.xml添加标签

<!-- 主键回填 -->
<insert id="add2" parameterType="com.mybatisstudy.pojo.User">
<!-- keyProperty:主键属性名,keyColumn:主键列名,resultType:主键类型,order:执行时机 -->
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
select last_insert_id();
</selectKey>
insert into user(username,sex,address)
values (#{username},#{sex},#{address})
</insert>

SELECT LAST_INSERT_ID():查询刚刚插入的记录的主键值,只适用于自增主键,且必须和insert语句一起执行。

3. 添加测试方法

// 测试主键回填功能
@Test
public void testAdd2(){
User user = new User("Lions","man","Beijing");
userMapper.add2(user);

session.commit();
System.out.println(user.getId());
}

4. 运行结果

好,控制台是成功显示添加了,用户id为11,那我们看看表里面是否成功添加了

确实是成功添加了,ok,本篇文章到此为止了,感谢小伙伴的浏览

文章目录
  1. 1. 一、使用#定义参数
    1. 1.1. 1. 持久层接口添加根据名字内容模糊查询方法
    2. 1.2. 2. UserMapper.xml映射文件添加标签
    3. 1.3. 3. 添加测试方法
    4. 1.4. 4. 运行结果
  2. 2. 二、使用$定义参数
    1. 2.1. 1. UserMapper.xml映射文件更改标签内容
    2. 2.2. 2. 修改测试方法
    3. 2.3. 3. 运行结果
  3. 3. 三、使用<bind>标签定义参数
    1. 3.1. 1. UserMapper.xml映射文件更改标签内容
    2. 3.2. 2. 运行结果
  4. 4. 四、聚合查询
    1. 4.1. 1. 持久层接口添加查询所有用户个数方法
    2. 4.2. 2. UserMapper.xml添加标签
    3. 4.3. 3. 添加测试方法
    4. 4.4. 4. 运行结果
  5. 5. 五、主键回填
    1. 5.1. 1. 持久层接口添加新增用户方法
    2. 5.2. 2. UserMapper.xml添加标签
    3. 5.3. 3. 添加测试方法
    4. 5.4. 4. 运行结果