格式化输出 where、set、trim
<select id="get" resultType="com.entity.user">
select * from user
<where>
<if test="Name!=null>user_name=#{Name}" and</if>
<if test="book!=null>book_name=#{book}" </if>
</where>
</select>
#where标签会知道如果它包含的标签中有返回值的话,它就插入一个‘where’。此外,如果标签返回的内容是以AND 或OR 开头的,
#可用于select、update、delete
#set 使用方法同where相同,用于update,成为set+if,来拼接更新内容
#trim更灵活,同时有where和set功能
#trim-》where
<trim prefix="WHERE" prefixOverrides="AND|OR">
<if >...</if>
...
</trim>
#trim->set
<trim prefix="SET" prefixOverrides=",">
<if >...</if>
...
</trim>
sql 拼接标签 foreach、if、choose
if标签通常用于where语句中,通过判断参数值来决定是否使用某个查询条件, 他也经常用于UPDATE语句中判断是否更新某一个字段,还可以在INSERT语句中用来判断是否插入某个字段的值
foreach用于构建in条件可用于批量删除、批量插入、批量查找等
<select id="get" resultType="com.entity.user"> select * from user <foreach collection="ids"item="id" open="(" close=")" separator=","> #{id} </foreach> </select> #通过id批量查找,也可以批量删除。ids 为user中一个list型变量。若直接传入的是list,则可写成array <insert id="saveList" parameterType="java.util.List"> insert into user(......) values <foreach collection="list" item="item" index="index" separator=","> ( #{item.id}, #{item.name}, ...... ) </foreach> </insert> # collection 属性的值有三个分别是list、array、map三种 # item 表示在迭代过程中每一个元素的别名 # index 表示在迭代过程中每次迭代到的位置(下标) # open 前缀 # close 后缀 # separator 分隔符,表示迭代时每个元素之间以什么分隔
choose:按顺序判断when中的条件出否成立,如果有一个成立,则choose结束。当choose中所有when的条件都不满则时,则执行 otherwise中的sql。类似于Java 的switch 语句,choose为switch,when为case,otherwise则为default。
<select id="get" resultType="com.entity.user">
select * from user
<where>
<choose>
<when test="id!=null">
id=#{id}
</when>
<when test="name!=null">
and name=#{name}
</when>
......
<otherwise>
</otherwise>
<choose>
</where>
</select>
<select id = "get2" resultType="com.entity.user">
select * from user
<choose>
<when test=" type == 'x1' '">
where 条件1;
</when >
<when test=" type == 'x2' '">
where 条件2;
</when >
<otherwise>
条件3; // 可以为空
</otherwise>
</choose>
<if test="type == 'x2' "> //如果除了以上条件外还有判断的条件,放在chose标签外,不用再写
where
and 条件2;
</if>
</select>
sql和include标签
Sql中可将重复的sql提取出来,使用时用include引用即可,最终达到sql重用的目的,
<sql id="mysql>
# sql片段代码
<if>...<if>
...
</sql>
<select id="find" resultType="com.entity.user">
select * from user
<where>
<include refid="mysql"/>
</where>
</select>