zoukankan      html  css  js  c++  java
  • MyBatis 动态SQL

    MyBatis 动态SQL

    简介

    动态 SQL是MyBatis强大特性之一。极大的简化我们拼装SQL的操作动态 。SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似

    应用

    if/where/trim

    通过表达式拼接SQL
    :添加where关键字,同时去掉多余and

    prefix:在操作的SQL语句前加入某些内容
    suffix:在操作的SQL语句后加入某些内容
    prefixOverrides:把操作的SQL语句前的某些内容去掉
    suffixOverrides:把操作的SQL语句后的某些内容去掉

    <select id="getEmpsListByMoreTJ" resultType="<u>Emp</u>">
    
              select <u>eid</u>,<u>ename</u>,age,sex,did from <u>emp</u> 
    
              where 1=1
    
              <if test="<u>eid</u> != null">
    
                  and <u>eid</u> = #{<u>eid</u>}
    
              </if>
    
              <if test="<u>ename</u> != null and <u>ename</u> != ''">
    
                  and <u>ename</u> = #{<u>ename</u>}
    
              </if>
    
              <if test="age != null">
    
                  and age = #{age}
    
              </if>
    
              <if test="sex == '男' or sex == '女'">
    
                  and sex = #{sex}
    
              </if>
    
         </select>
    
    
    
    <select id="getEmpsListByMoreTJ" resultType="Emp">
    
              <!-- select <u>eid</u>,<u>ename</u>,age,sex,did from <u>emp</u> --> 
    
              <include refid="empColumns"></include>
    
              <trim prefix="where" suffixOverrides="and|or"> 
    
                  <if test="eid != null">
    
                       <u>eid</u> = #{<u>eid</u>} and
    
                  </if>
    
                  <if test="ename != null and ename != ''">
    
                       <u>ename</u> = #{<u>ename</u>} and
    
                  </if>
    
                  <if test="age != null">
    
                       age = #{age} or
    
                  </if>
    
                  <if test="sex == 1 or sex == 0">
    
                       sex = #{sex}
    
                  </if>
    
              </trim>
    
         </select>
    
    
    

    choose

    :选择某一个when或otherwise拼接SQL
    :通过test表达式拼接SQL
    :当when都不符合条件,就会选择otherwise拼接SQL

    <select id="getEmpsListByChoose" resultType="Emp">
    
              select <u>eid</u>,<u>ename</u>,age,sex from <u>emp</u> 
    
              where
    
              <choose>
    
                  <when test="eid != null">
    
                       <u>eid</u> = #{<u>eid</u>}
    
                  </when>
    
                  <when test="ename != null and ename != ''">
    
                       <u>ename</u> = #{<u>ename</u>}
    
                  </when>
    
                  <when test="age != null">
    
                       age = #{age}
    
                  </when>
    
                  <otherwise>
    
                       sex = #{sex}
    
                  </otherwise>
    
              </choose>
    
         </select>
    
    
    

    foreach


    对一个数组或集合进行遍历
    collection:指定要遍历的集合或数组
    item:设置别名
    close:设置循环体的结束内容
    open:设置循环体的开始内容
    separator:设置每一次循环之间的分隔符
    index:若遍历的是list,index代表下标;若遍历的是map,index代表键

    <delete id="deleteByList">
    
              delete from <u>emp</u> where <u>eid</u> in
    
              <foreach collection="list" item="eid" 
    separator="," open="(" close=")">
    
                  #{<u>eid</u>}
    
              </foreach>
    
         </delete>
    
    
    

    set

    主要是用于解决修改操作中SQL语句中可能多出逗号的问题

    <update id="updateEmpByConditionSet">
    
                       update  tbl_employee  
    
                       <set>
    
                                <if test="lastName!=null &amp;&amp; lastName!=&quot;&quot;">
    
                                          last_name = #{lastName},
    
                                </if>
    
                                <if test="email!=null and email.trim()!=''">
    
                                          email = #{email} ,
    
                                </if>
    
                                <if test="&quot;m&quot;.equals(gender) or &quot;f&quot;.equals(gender)">
    
                                         gender = #{gender} 
    
                                </if>
    
                       </set>
    
                        where id =#{id}
    
             </update>
    
    
    

    设置公共sql

    :设置一段SQL片段,即公共SQL,可以被当前映射文件中所有的SQL语句所访问
    <include refid="empColumns">:访问某个SQL片段

    <sql id="empColumns">select <u>eid</u>,<u>ename</u>,age,sex,did from 
    <u>emp</u> </sql>
    
         <select id="getEmpByEid" 
    resultType="com.atguigu.bean.Emp">
    
              <include refid="empColumns"></include> where <u>eid</u> 
    = #{<u>eid</u>}
    
         </select>
    
    
    
  • 相关阅读:
    JqueryDataTable的使用(.Net平台)
    MvcPager使用的Demo(同步分页)
    第一篇随笔
    基于querybuilder的可根据现有数据表自动生成Restful API的dotnet中间件
    EF Core懒人小技巧之拒绝DbSet
    【基于EF Core的Code First模式的DotNetCore快速开发框架】完成对DB First代码生成的支持
    基于EF Core的Code First模式的DotNetCore快速开发框架
    Service Fabric独立集群搭建
    Win10打补丁KB4022725出现0x80073712错误
    【懒人有道】在asp.net core中实现程序集注入
  • 原文地址:https://www.cnblogs.com/suit000001/p/13334672.html
Copyright © 2011-2022 走看看