MyBatis之动态sql

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

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标签。

1.if和where

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

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

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

2.sql片段

通过sql片段可以将通用的sql语句抽取出来,单独定义,在其它的statement中可以引用sql片段。其中通用的sql语句,一般用在:where条件、查询列。

2.1定义sql片段

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

2.2使用sql片段

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


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

有时候我们希望查询语句是这样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:
各属性说明见代码注释,然后是测试代码:

通过这5篇文章,我们便完成了MyBatis学习的基础知识。

2018.3.19更

欢迎加入我的Java交流1群:659957958。

2018.4.21更:如果群1已满或者无法加入,请加Java学习交流2群:305335626

4.联系

If you have some questions after you see this article,you can tell your doubts in the comments area or you can find some info by clicking these links.

记得扫一扫领一下红包再走哦