Mybatis学习记录(五)----Mybatis的动态SQL

时间:2022-06-13 19:39:14

1.  什么是动态sql

mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。

1.1 需求

用户信息综合查询列表和用户信息查询列表总数这两个statement的定义使用动态sql。

对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。

1.2  UserMapper.xml

Mybatis学习记录(五)----Mybatis的动态SQL

Mybatis学习记录(五)----Mybatis的动态SQL

1.3  测试代码

Mybatis学习记录(五)----Mybatis的动态SQL

2.  sql片段

2.1 需求

将上边实现的动态sql判断代码块抽取出来,组成一个sql片段。其它的statement中就可以引用sql片段。方便程序员进行开发。

2.2 定义sql片段

Mybatis学习记录(五)----Mybatis的动态SQL

2.3 引用sql片段

在mapper.xml中定义的statement中引用sql片段:

Mybatis学习记录(五)----Mybatis的动态SQL

Mybatis学习记录(五)----Mybatis的动态SQL

3.  foreach

向sql传递数组或List,mybatis使用foreach解析

3.1 需求

在用户查询列表和查询总数的statement中增加多个id输入查询。

sql语句如下:

两种方法:

SELECT * FROM USER WHERE id=1 OR id=4 OR id=5

SELECT * FROM USER WHERE id IN(1,4,5)

3.2 在输入参数类型中添加List<Integer> ids传入多个id

Mybatis学习记录(五)----Mybatis的动态SQL

3.3 修改mapper.xml

WHERE id=1 OR id=4 OR id=5

在查询条件中,查询条件定义成一个sql片段,需要修改sql片段。

Mybatis学习记录(五)----Mybatis的动态SQL

3.4 测试代码

Mybatis学习记录(五)----Mybatis的动态SQL

3.5 另外一个sql的实现:

Mybatis学习记录(五)----Mybatis的动态SQL

4.  choose、when、otherwise

choose元素的作用就相当于JAVA中的switch语句,基本上跟JSTL中的choose的作用和用法是一样的,通常都是与when和otherwise搭配的。

4.1. UserMapper.xml

Mybatis学习记录(五)----Mybatis的动态SQL

when元素表示当when中的条件满足的时候就输出其中的内容,跟JAVA中的switch效果差不多的是按照条件的顺序,当when中有条件满足的时候,就会跳出choose,即所有的when和otherwise条件中,只有一个会输出,当所有的我很条件都不满足的时候就输出otherwise中的内容。

4.2. UserMapper.java

Mybatis学习记录(五)----Mybatis的动态SQL

4.3. 测试代码

Mybatis学习记录(五)----Mybatis的动态SQL

5.  trim、where、set

trim元素的主要功能是可以在自己包含的内容前加上某些前缀,也可以在其后加上某些后缀,与之对应的属性是prefix和suffix;可以把包含内容的首部某些内容覆盖,即忽略,也可以把尾部的某些内容覆盖,对应的属性是prefixOverrides和suffixOverrides;

set元素主要是用在更新操作的时候,它的主要功能和where元素其实是差不多的,主要是在包含的语句前输出一个set,然后如果包含的语句是以逗号结束的话将会把该逗号忽略,如果set包含的内容为空的话则会出错。有了set元素我们就可以动态的更新那些修改了的字段。

5.1 UserMapper.xml

Mybatis学习记录(五)----Mybatis的动态SQL

5.2 UserMapper.java

Mybatis学习记录(五)----Mybatis的动态SQL

5.3 测试代码

Mybatis学习记录(五)----Mybatis的动态SQL

where元素的作用是会在写入where元素的地方输出一个where,另外一个好处是你不需要考虑where元素里面的条件输出是什么样子的,MyBatis会智能的帮你处理,如果所有的条件都不满足那么MyBatis就会查出所有的记录,如果输出后是and 开头的,MyBatis会把第一个and忽略,当然如果是or开头的,MyBatis也会把它忽略;此外,在where元素中你不需要考虑空格的问题,MyBatis会智能的帮你加上。

6.  Bind

bind元素允许在在OGNL表达式之外创建一个变量,并且将它绑定在context上。

6.1 UserMapper.xml

Mybatis学习记录(五)----Mybatis的动态SQL

6.2 UserMapper.java

Mybatis学习记录(五)----Mybatis的动态SQL

6.3 测试代码

Mybatis学习记录(五)----Mybatis的动态SQL