咱们须要知道的是,使用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
使用if标签和where标签在UserMapper.xml中添加以下内容:
修改自定义查询条件查询用户列表代码:app
发现<where>
和<if>
在上述两个查询语句中重复的代码出现了两次,那这里咱们是否能够把相同的sql片断拿出来单独写在一个sql片断中而后再在不一样的查询语句中应用呢?答案是确定的,看下面的sql片断。spa
经过sql片断能够将通用的sql语句抽取出来,单独定义,在其它的statement中能够引用sql片断。其中通用的sql语句,通常用在:where条件、查询列。code
在UserMapper.xml中添加<sql>
标签表明sql片断:
这样就完成了sql片断的定义,而后才能使用sql片断。xml
使用<include>
标签对上面定义的sql片断加以引用:
和
get
测试类代码不变,这样咱们便完成了对sql片断的引用。table
有时候咱们但愿查询语句是这样select id,username,birthday from user where username like '%codingXiaxw%' and id in (1,2)
,那咱们又应该在sql片断中如何添加代码呢?这时候须要用到<foreach>
标签。
在statement经过foreach遍历parameterType中的集合类型。首先咱们须要在UserQueryVo中定义Listids属性:
并添加相应的get和set方法。
而后咱们在UserMapper.xml中使用foreach修改where语句,使用foreache遍历list:
各属性说明见代码注释,而后是测试代码: