MyBatis之动态sql

咱们须要知道的是,使用mybatis重点是对sql的灵活解析和处理。在原先的UserMappser.xml中,咱们这样查询表中知足条件的记录 :sql

1
2
3
<select id="findUserList" parameterType="userQueryVo" resultType="user">
  	 	select id,username,birthday from user where username like '${value}'
</select>

上述语句在表中查询知足username条件的记录,这样写查询语句有一个弊端,就是该语句只能经过username查询数据库。当咱们在多条件中查询时,若是不须要username条件而是须要其它多个查询条件时,那UserMapper.xml文件中的这个查询条件就没用了。数据库

需求:将自定义查询条件查询用户列表和查询用户列表总记录数改成动态sql。须要使用if标签和where标签。mybatis

1.if和where

使用if标签和where标签在UserMapper.xml中添加以下内容:
修改自定义查询条件查询用户列表代码:app

修改自定义查询条件查询用户列表总记录数代码:
测试

发现<where><if>在上述两个查询语句中重复的代码出现了两次,那这里咱们是否能够把相同的sql片断拿出来单独写在一个sql片断中而后再在不一样的查询语句中应用呢?答案是确定的,看下面的sql片断。spa

2.sql片断

经过sql片断能够将通用的sql语句抽取出来,单独定义,在其它的statement中能够引用sql片断。其中通用的sql语句,通常用在:where条件、查询列。code

2.1定义sql片断

在UserMapper.xml中添加<sql>标签表明sql片断:
这样就完成了sql片断的定义,而后才能使用sql片断。xml

2.2使用sql片断

使用<include>标签对上面定义的sql片断加以引用:


get

测试类代码不变,这样咱们便完成了对sql片断的引用。table

有时候咱们但愿查询语句是这样select id,username,birthday from user where username like '%codingXiaxw%' and id in (1,2),那咱们又应该在sql片断中如何添加代码呢?这时候须要用到<foreach>标签。

3.foreach标签

在statement经过foreach遍历parameterType中的集合类型。首先咱们须要在UserQueryVo中定义Listids属性:
并添加相应的get和set方法。

而后咱们在UserMapper.xml中使用foreach修改where语句,使用foreache遍历list:
各属性说明见代码注释,而后是测试代码:

相关文章
相关标签/搜索