MyBatis动态sql语句

1.什么是动态sql?

           动态sql是MyBatis特性之一,可以根据用户传入的条件,

    借助xml标签对sql语句进行拼接,生成符合条件的sql语句.

    sql映射文件:多个sql映射文件之间,namespace名称不能相同

2.动态sql语句的用法

         2.1分支结构

              <if test = " ">  </if>

                      test中内容为true,拼接上标签sql语句,为false不拼接

           <choose>

                    <when test = " "></when>

                    <otherwise></otherwise>

             </choose>       

 <!-- 查询员工信息 -->
<mapper namespace = com.zhou.model.Emp>
   <!-- 如果传入了部门编号,就查询该部门下所有员工信息
        如果没有传入部门编号,就查询所有员工信息-->
   <select id = "queryEmps" parameterType="emp" resultType="emp">
      select * from emp
        <!--有判断有没有部门编号-->
         <if test = "deptno != 0">
            where deptno = #{deptno} 
         </if>
   </select>

    <!-- 根据薪资查询员工
         如果传入了薪资,就查询大于此薪资的员工信息
         如果没有传入薪资,查询薪资大于6000的员工信息 -->  
    <select id = "queryEmpsBySalary" parameterType="emp" resultType="emp">
       select * from emp where salary >
           <!--如果传入薪资--> 
           <if test="salary != 0">
               #{salary}
           </if>
           <!--如果没有传入薪资--> 
           <if test="salary == 0">
                6000
           </if>
     </select>

     <!-- 根据性别查询员工信息
          如果传入了性别,就查询此性别的员工
          如果没有传入性别,就查询所有男性员工-->    
     <select id="selectEmpBySex" parameterType="emp" resultType="emp">
         select * from emp where sex =
            <!--判断有没有传入性别-->
            <choose>
               <!--如果传入性别-->
                <when test="sex" != null>
                   #{sex}
                </when>
               <!--如果没有传入性别-->
               <otherwise>'男'</otherwise>
            </choose>
      </select>  
</mapper>
                    

         2.2关键字标签

                         where关键字

                           (1)充当sql语句中一个where关键字

                           (2)去掉sql语句拼接完成之后多余的and   or关键字            

<mapper namespace = com.zhou.model.Emp>
    <!-- 根据job和salary两个条件查询员工信息
         如果只传入了job,则查询该职位的员工信息
         如果只传入了salary,则查询薪水大于此salary的员工信息
         如果两个条件都传入,就查询该职位下薪资大于此salary的员工信息
         如果两个条件都没有传入,就查询所有的员工信息-->
    <select id="queryEmpBySalaryAndJob" parameterType="emp" resultType="emp">
         select * from emp 
           <where>
              <if test="job != null">
                  and job = #{job}
              </if>
              <if test="salary != 0">
                   and salary > #{salary}
              </if>
           </where>
     </select>  
</mapper>

                        set关键字

                          (1)充当sql语句中一个set关键字

                          (2)去掉拼接完sql语句后多余的逗号

<mapper namespace = com.zhou.model.Emp>
   <!-- 修改emp员工信息,判断传入了几项数据,传入了几项数据,就要去修改几项数据 --> 
     <update id="updateEmp" parameterType="emp">
           update emp 
         <set>       
           <if test="name != null">
                name=#{name},
           </if>
           <if test="sex != null">
                sex = #{sex},
           </if>
           <if test="job != null">
                 job = #{job},
           </if>
           <if test="salary != null">
                salary = #{salary},
           </if>
           <if test="hiredate != null">
                hiredate = #{hiredate},
           </if>
           <if test="deptno != null">
                deptno = #{deptno}
           </if>          
         </set>
             where id = #{id}
      </update>
</mapper>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

      

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值