zoukankan      html  css  js  c++  java
  • Mybatis使用动态sql

    动态sql

    常见的几种:trim、where、set、foreach、if、choose、when

    下面通过案例一一演示


    if语法

    1 <select id="selectIfTest1" resultType="cn.kgc.mybatisdemo.mode.User">
    2         select id , userCode , userName from smbms.smbms_user where 1=1
    3           <if test="userName !=null and userName != '' ">
    4               and userName like concat('%',#{userName},'%')
    5           </if>
    6           <if test="roleId != 0">
    7               and userRole = #{roleId}
    8           </if>
    9     </select>

    if模块在判断通过后拼接模块内的代码

    接下来是where代码

     1 <select id="selectIfTest2" resultType="cn.kgc.mybatisdemo.mode.User">
     2         select id , userCode , userName from smbms.smbms_user
     3         <where>
     4             <if test="userName != null and userName != ''">
     5                 and userName like concat('%',#{userName},'%')
     6             </if>
     7             <if test="roleId != 0">
     8                 and roleId = #{roleId}
     9             </if>
    10         </where>
    11     </select>

    /*
    where标签代替了where关键字,他除了能给添加关键字同时,
    也可以智能的出去多余的and和or,where标签一般和if一起使用
    当where标签中的if条件都不满足要求的时候,where标签不会拼接关键字
    */

    set标签的使用

     1 <update id="updateUserTest3">
     2         update smbms.smbms_user
     3         <set>
     4             <if test="userName != null and userName != ''">
     5                 userName = #{userName},
     6             </if>
     7             <if test="userCode != null and userCode != ''">
     8                 userCode = #{userCode},
     9             </if>
    10             <if test="userPassword != null and userPassword != ''">
    11                 userPassword = #{userPassword},
    12             </if>
    13             <if test="modifyDate != null" >
    14                 modifyDate = now(),
    15             </if>
    16         </set>
    17</update>

    /*
    set标签 代替set关键字,可以智能的删除多余的逗号
    其他内容和where一样,修改的时候必须要传值,否则会报错,这样就没意义了
    */

    trim的使用

    <update id="updateUserTest4">
            update smbms_user
            
            <trim prefix="set" suffixOverrides="," suffix="where id = #{id}">
                    <if test="userName != null and userName != ''">
                        userName = #{userName},
                    </if>
                    <if test="userCode != null and userCode != ''">
                        userCode = #{userCode},
                    </if>
                    <if test="userPassword != null and userPassword != ''">
                        userPassword = #{userPassword},
                    </if>
                    <if test="modifyDate != null" >
                        modifyDate = now(),
                    </if>
            </trim>
        </update>

    /*
    prefix添加前缀
    prefixOverride清除前缀’
    suffix添加后缀
    suffixOverride清除后缀

    trim 迄今为止最好用的标签
    */

    foreach的三种形式

    <select id="selectUserByForeachArray" resultType="cn.kgc.mybatisdemo.mode.User">
            select id,userName,userCode,userPassword from smbms.smbms_user
            where userRole in
            /*
            collection:当前的参数类型(必填)
            open:开始要添加的字符
            separator:分隔符
            close:结束时要添加的字符
            item:相当于变量
            */
            <foreach collection="array" open="(" separator="," close=")" item="roleId">
                #{roleId}
            </foreach>
        </select>

    第二种

        <select id="selectUserByList" resultType="cn.kgc.mybatisdemo.mode.User">
            select id,userName,userCode,userPassword from smbms.smbms_user where userRole in
            <foreach collection="list" item="roleId" open="(" separator="," close=")">
                #{roleId}
            </foreach>
        </select>

    第三种

        <select id="selectUserByMap" resultType="cn.kgc.mybatisdemo.mode.User">
          select id,userName,userCode,userPassword from smbms.smbms_user where userRole in
            /*
              这里的collection的值放的是Map集合的键
            */
          <foreach collection="roleId" open="(" separator="," close=")" item="roleId">
              #{roleId}
          </foreach>
            and gender = #{gender}
        </select>

    choose的使用

        <select id="selectUserByChoose" resultType="cn.kgc.mybatisdemo.mode.User">
            select id,userName,userCode,userPassword from smbms.smbms_user
            /*
            choose类似于java中的switch when相当于case,只要走一个分支就不进入其他分支
            otherwise是默认,如果上面条件不满足就走它
            */
            <where>
                <choose>
                    <when test="id != 0 and id != null">
                        id = #{id}
                    </when>
                    <when test="userName != null and userName != '' ">
                        userName like concat('%',#{userName},'%')
                    </when>
                    <when test="gender">
                        gender = #{gender}
                    </when>
                    <otherwise>
                        1=1
                    </otherwise>
                </choose>
            </where>
        </select>

  • 相关阅读:
    使用 Vim 搭建 JavaScript 开发环境
    SpaceVim 语言模块 erlang
    SpaceVim 语言模块 lua
    SpaceVim 语言模块 python
    SpaceVim 语言模块 elixir
    SpaceVim 语言模块 dart
    SpaceVim 语言模块 elm
    如何配置 SpaceVim
    彻底理解浏览器缓存机制
    react-创建react元素
  • 原文地址:https://www.cnblogs.com/love-menglong/p/11268353.html
Copyright © 2011-2022 走看看