zoukankan      html  css  js  c++  java
  • MyBatis 常用写法

    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>
    
  • 相关阅读:
    poj 3070 矩阵快速乘
    将数字放大显示
    hdu 火车入队 stack
    linq to Entity 数据库除了有主键还有唯一索引,是不是不能更新
    整理:C#写ActiveX, 从代码到打包到签名到发布的示例
    Java—FileOperator
    第二章-递归与分治策略
    第四章-贪心算法
    第五章-回溯法
    Linux中C程序调试、makefile
  • 原文地址:https://www.cnblogs.com/zt19994/p/9999696.html
Copyright © 2011-2022 走看看