Mapper.xml 其他标签(3)

格式化输出 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>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值