MyBatis框架动态SQL
MyBatis框架之所以优秀,一是因为将sql与代码分离,二就是具有强大的动态sql功能。
主要的动态sql有:
1.if标签的使用。
2.where标签的使用。
3.where标签与choose标签的联合使用。
4.set标签的使用。
5.foreach标签的使用。
6.trim标签的使用。
一,if标签的使用
如下:
<select id="queryList" parameterType="studentModel" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from student
WHERE name=#{name}
<if test="age > 0">
AND age=#{age}
</if>
</select>
说明:
1.if的作用是判断是否满足条件,满足条件时if里面的sql片段才生效。
2.此时的意思是:如果age大于0则在where中添加age的判断条件。
二,where标签的使用
如下:
<select id="queryList" parameterType="studentModel" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from student
<where>
<if test="name!=null and name.length()>0">
AND name=#{name}
</if>
<if test="age > 0">
AND age=#{age}
</if>
</where>
</select>
说明:
1.where常与if连用,当if中有满足的条件时where才会其作用。
2.where标签中的每一个字段前都可以加and,系统会自己将第一个满足条件的字段前and去掉。
三,where标签与choose标签联合的使用
如下:
<select id="queryList" parameterType="studentModel" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from student
<where>
<choose>
<when test="name!=null and name.length()>0">
AND name=#{name}
</when>
<when test="age > 0">
AND age=#{age}
</when>
<otherwise>
</otherwise>
</choose>
</where>
</select>
说明:where标签与choose标签连用比与if标签联用的优点是:当都不满足条件时可以在otherwise标签中设置默认的判断条件。
set标签的使用
如下:
<update id="update" parameterType="studentModel">
UPDATE student
<set>
<if test="name!=null and name.length()>0">
name= #{name},
</if>
<if test="age>0">
age = #{age},
</if>
</set>
WHERE id = #{id}
</update>
说明:
1.set标签常用if标签一起使用。
2.每个if中的sql片段都要加逗号,这也是sql语法的要求。
五,foreach标签的使用
如下:
<select id="getObjectByIds" parameterType="java.util.List" resultType="studentModel">
select name,age
from student
where id in
<foreach collection="list" index="index" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</select>
说明:
1.collection :collection属性的值有三个分别是list、array、map三种,分别对应的参数类型为:List、数组、map集合,我在上面传的参数为集合,所以值为list.
2.item : 表示在迭代过程中每一个元素的别名
3.index :表示在迭代过程中每次迭代到的位置(下标)
4.open :前缀
5.close :后缀
6.separator :分隔符,表示迭代时每个元素之间以什么分隔.
六,trim标签的使用
如下:
<update id="testTrim" parameterType="com.mybatis.pojo.User">
update user
<trim prefix="set" suffixOverrides=",">
<if test="cash!=null and cash.length()>0">
cash= #{cash},
</if>
<if test="address!=null and address.length()>0">
address= #{address},
</if>
</trim>
where id = #{id}
</update>
说明:此时把set拼接在cash=#{cash}前。并把address=#{address}后面的逗号删除。
目前所知道常用的动态sql标签就是这些。