1. <if>
元素
当<if>
中的test
的值为真时就执行加括号里面的语句,否则就不执行。
示例如下:
数据库准备
|
|
POJO 类准备
在 org.exmaple.pojo
下新建一个 Customer
类,代码如下:
|
|
创建映射文件
|
|
修改核心配置文件
|
|
创建测试类
|
|
运行结果
|
|
代码分析
|
|
这段代码接受一个Customer
类作为参数主要对where
部分进行了条件判断,当 Customer.name
存在时进行name
筛选,当Customer.phone存在时进行phone
筛选。
2. <choose>
、<when>
、<otherwise>
元素
使用<if>
元素时,可以选择多个元素进行执行;如果需要选择单个元素,用<if>
是不合适的,此时应该使用<when>
,<when>
只能选择单个元素进行执行。有点类似于switch...case...default...
语句。
- choose: 类似于
switch
。 - when: 类似于
case
。 - otherwise: 类似于
default
。
基本格式:
|
|
3. <where>
和<trim>
3.1 <where>
之前我们在使用<if>
元素时,会在where
后面加上1=1
来确保即使后面条件判断不成立这个 SQL 语句没有语法错误,能够执行<where>
可以替代1=1
,只要在<if>
元素外边包裹一层<where>
就可以了,这样既符合逻辑,又清晰明了。
3.2 <trim>
除了可以使用<where>
来实现之外,还可以使用<trim>
来实现这个功能,<trim>
用来删除多余的关键字。
下面是<trim>
元素的属性:
- prefix:指定给SQL语句增加的前缀;
- prefixOverrides:指定要给SQL语句中去掉的前缀字符串;
- suffix:指定要给SQL语句增加的后缀;
- suffixOverrides:指定要给SQL语句中去掉都后缀字符串。
4. 更新操作
在实际开发中,一般我们只想更新某个对象的某个或多个字段,如果像传统的Hibernate
框架,就必须发送所有的字段给持久化对象,这个会导致执行效率非常低。而MyBatis
给出了<set>
元素,和<if>
元素结合可以实现更新需要更新字段的目的。
格式为:
|
|
5. 复杂查询操作
5.1 <foreach>
元素的属性
5.1.2 迭代数组
假如有一个数据表,结构如下:
|
|
我们要根据一个id数组来查询多个用户的名字,映射文件可以这样配置:
|
|
如果我们这样调用:
|
|
会生成下列语句:
|
|
这个id IN (1, 2, 3)
语句其实就是id=1 OR id=2 OR id=3
的简写。
根据所学知识,上述映射文件代码就等价于:
|
|
5.1.3 迭代List
使用方法类似于Array,只是把传入参数改成List。
映射文件可以这样配置:
|
|
调用方法:
|
|
5.1.3 迭代 Map
通过指定多个限定条件来查询符合条件的用户(AND
),可以使用Map。
通过id和姓名来查询用户:
|
|
其中,里面的ids就是传入的Map对象的ids键所对应的值(是一个数组),然后通过<foreach>
遍历获取每一个id,ids就是传入的Map对象的ids键所对应的值。
|
|
就会生成这个sql语句:
|
|
实践:学生信息查询系统
利用本章属于知识完成一个学生信息查询系统。该系统要求实现以下三个功能:
- 当用户输入的学生姓名不为空时,则只根据学生姓名进行学生信息的查询。
- 当用户输入的学生姓名为空,而学生专业为空时,则指根据学生专业进行学生信息的查询。
- 当用户输入的学生姓名和专业都为空,则要求查询出所有学号不为空的学生信息。
第一步:数据库数据准备
登录 MySQL 终端,输入以下代码:
|
|
第二步:创建 POJO 类
在org.example.pojo
包下新建一个Student.java
文件,创建 POJO 类 Student
|
|
第三步:Mapper 映射文件配置
创建 StudentMapper,创建映射关系和查询条件:
|
|
第四步:配置 MyBatis 配置文件
在mybatis-config.xml 里,把 StudentMapper.xml 文件包含进去:
|
|
第五步:创建测试类
在 test/java/Test 目录下创建 StudentTest.java 文件,添加以下测试方法:
|
|
第五步:查看运行结果😆
成功了,这一章学习圆满结束!🎆🎆
输出结果如下:
-
test1:
1
Student [name=zhangsan, major=computer, id=1]
-
test2:
1
Student [name=shiyi, major=economics, id=12]
-
test3:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Student [name=zhangsan, major=computer, id=1] Student [name=lisi, major=mathematics, id=2] Student [name=wangwu, major=physics, id=3] Student [name=zhaoliu, major=chemistry, id=4] Student [name=sunqi, major=biology, id=5] Student [name=zhouba, major=engineering, id=6] Student [name=wujiu, major=literature, id=7] Student [name=zhengshi, major=history, id=8] Student [name=liuyi, major=philosophy, id=9] Student [name=qibai, major=art, id=10] Student [name=bajiu, major=music, id=11] Student [name=shiyi, major=economics, id=12] Student [name=shier, major=political science, id=13] Student [name=shisan, major=sociology, id=14] Student [name=shisi, major=psychology, id=15] Student [name=shiwu, major=law, id=16] Student [name=shiliu, major=medicine, id=17] Student [name=shiqi, major=nursing, id=18] Student [name=shiba, major=education, id=19] Student [name=shijiu, major=business, id=20] Student [name=ershi, major=architecture, id=21]