MyBatis之动态SQL篇
MyBatis之动态SQL讲解
mybatis
mybatis核心是对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。
if标签
if
where标签
if的配置也可以按照如下来写:
where
<where />可以自动处理第一个and。
foreach标签
向配置文件的sql传递数组或List,MyBatis使用foreach解析,如下:
如果我们需要传递多个id来查询多个用户的信息,可以使用foreach。SQL语句的写法如下:
sql查询
使用foreach如下(通过pojo传入list):
标签含义
list1
或者
list2
传递单个List
传递List类型在编写mapper.xml没有区别,唯一的区别是只有一个List参数时它的参数名为list。如下图:
单个list
传递单个数组
单个数组
sql只接收一个数组参数,这时sql解析参数的名称mybatis固定为array,如果数组是通过一个pojo传递到sql则参数的名称为pojo中的属性名。
传递单个简单数组类型
简单数组
如果数组的类型为简单类型则写为#{item},不用在通过ognl获取对象的属性值了。
SQL代码块
SQL中重复的SQL可以提取出来,调用时用include标签引用即可,最终达到SQL重复利用的目的,如下:
sql
如果有多个statement都使用相同的查询条件,那么就可以把查询条件抽取出来作为单独的SQL代码块。如下图:
sql 代码块
include的使用
include使用
解释
基本的POJO类型 User.java
User.java
自定义的POJO UserCustom
UserCustom.java
视图POJO QueryVo.java
QueryVo.java
这样满足基本的需求,如果我们在查询中需要加入其它查询条件,只需要修改QueryVo,这样就可以实现较好的可扩展性。