MyBatis - 动态SQL的使用
动态SQL介绍
-
MyBatis映射配置文件中,在业务逻辑复杂时,我们的SQL可以是动态变化的。
-
多条件查询
-
动态标签
<if> : 条件判断标签
<foreach> :遍历循环标签
<if> 判断标签
-
<where> :条件标签,如果需要使用到条件标签,则使用该标签代替where关键字。
-
<if> :判断标签.
当使用多语句查询时,我们原来查询方式为
SELECT * FROM student WHERE id = #{id} AND name = #{name} AND age = #{age}
可以看出,这种的查询方式不够灵活,当我们需要根据其中一个或多个字段查询时,则需要重写多个
SQL语句,这明显不符合我们的编程思想。
这时候,我们就需要使用到条件判断,进行动态的SQL语句实现。
SELECT * FROM student
<where>
<if test="id != null">
id = #{id}
</if>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
<foreach> 标签
当我们想要查询多个id时,之前的查询方式如下
SELECT * FROM student WHERE id = 1 OR id = 2
//或
SELECT * FROM student WHERE id IN (1,2,3)
-
<foreach> :循环遍历标签,适合用于多个参数或者的关系。
-
属性
conlection : 参数容器类型(list-集合,array-数组)
open : 开始的SQL语句
close : 结束的SQL语句
item : 参数的变量名
separator : 分隔符
<select id="selectByIds" resultType="student" parameterType="list"> SELECT * FROM student <where> <foreach collection="list" open="id In(" close=")" item="id" separator=","> #{id} </foreach> </where> </select>
SQL片段抽取
- 我们可以将一些重复性的SQL语句进行抽取,以达到复用的效果
- <sql> : 抽取SQL语句标签.
- <include> : 引入SQL片段标签.
- 通过<sql>标签中的id属性,设置标识符.在SQL操作语句中,创建<include>标签,在refid属性中,与<sql>标签中的id标识符相匹配,进行SQL片段的抽取.
// 属性id : 片段唯一标识符
<sql id="select">SELECT * FROM student</sql>
// 属性refid : 片段唯一标识符
<select id="selectAll" resultType="student">
<include refid="select"></include>
</select>