欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MyBatis 常用写法

程序员文章站 2022-10-16 14:28:01
MyBatis 常用写法 1、forEach 循环   forEach 元素的属性主要有 item, idnex, collection, open, separator, close。 1. collection:传入的 List 或 Array 或自己封装的 Map。 2. ......

mybatis 常用写法

1、foreach 循环

  foreach 元素的属性主要有 item, idnex, collection, open, separator, close。

  1. collection:传入的 list 或 array 或自己封装的 map。
  2. item:集合中元素迭代时的别名。
  3. idnex:集合中元素迭代是的索引。
  4. open:where 后面表示以什么开始,如以‘(’开始。
  5. separator:表示在每次进行迭代是的分隔符。
  6. close:where后面表示以什么结束,如以‘)’结束。
//mapper中需要传递一个容器
public list<user> querybyidlist(list<integer> useridlist);

<select id="querybyidlist" resultmap="baseresultmap" parametertype="map">
    select * from user
    where userid in
    <foreach collection="useridlist" item="id" index="index" open="(" close=")" separator=",">
        #{id}
    </foreach>
</select>

2、concat 模糊查询

//模糊查询使用concat拼接sql
<select id="querybyname" resultmap="baseresultmap" paramtertype"string">
    select * from user
    <where>
        <if test="name != null">
            name like concat('%', concat(#{name}, '%'))
        </if>
    </where>
</select>

3、if + where 标签

  用 if 标签判断参数是否有效来进行条件查询。

<select id="getuserlist" resultmap="baseresultmap" paramtertype="com.demo.user">
    select * from user
    <where>
        <if test="userid !=null and userid!= ''">
            userid= #{userid}
        </if>
        <if test="name !=null and name!= ''">
            and name= #{name}
        </if>
        <if phone="userid !=null and phone!= ''">
            and phone= #{phone}
        </if>
    </where>
</select>

where 动态语句中,where 标签会自动去掉 and 或 or。防止 where and 错误。

4、if + set

  使用 set 标签可以动态的配置 set 关键字,使用 if + set 标签,如果某项为 null 则不进行更新。

<update id="updateuser" paramtertype="com.demo.user">
    update user
    <set>
        <if test=" name != null and name != ''">
            name = #{name},
        </if>
        <if test=" phone != null and phone != ''">
            phone = #{phone},
        </if>
    </set>
    where userid = #{userid}
</update>

5、if + trim 代替 where/set 标签

  trim 可以更灵活的去处多余关键字的标签,可以实现 where 和 set 的效果。

<select id="getuserlist" resultmap="baseresultmap" paramtertype="com.demo.user">
    select * from user
    <trim prefix="where" prefixoverrides="and|or">
        <if test="userid !=null and userid!= ''">
            userid= #{userid}
        </if>
        <if test="name !=null and name!= ''">
            and name= #{name}
        </if>
        <if phone="userid !=null and phone!= ''">
            and phone= #{phone}
        </if>
    </trim>
</select>

<update id="updateuser" paramtertype="com.demo.user">
    update user
    <trim prefix="set" suffixoverrides=",">
        <if test=" name != null and name != ''">
            name = #{name},
        </if>
        <if test=" phone != null and phone != ''">
            phone = #{phone},
        </if>
    </trim>
    where userid = #{userid}
</update>

5、choose(when, otherwise)标签

  choose 标签是按顺序判断其内部 when 标签中的 test 条件是否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满足,则执行 otherwise 中的 sql。类似 java 中的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。

<select id="selectcustomerbycustnameandtype" parametertype="map" resultmap="baseresultmap">
    select * from user
    <choose>
        <when test="utype == 'name'">
            where name = #{name} 
        </when>
        <when test="utype == 'phone'">
            where phone= #{phone}
        </when>
        <when test="utype == 'email'">
            where email= #{email}
        </when>
        <otherwise>
            where name = #{name}
        </otherwise>
    </choose>
</select>