温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

好程序员Java分享Mybatis必会的动态SQL

发布时间:2020-08-08 21:33:47 来源:ITPUB博客 阅读:147 作者:好程序员IT 栏目:编程语言

好程序员 Java 分享 Mybatis 必会的动态 SQL 前言

Mybatis 可谓是 java 开发者必须会的一项技能。 MyBatis 的强大特性之一便是它的动态 SQL 。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。

M ybatis 动态 sql

mybatis 动态SQL,通过 if, choose, when, otherwise, trim, where, set, foreach等标签,可组合成非常灵活的SQL语句,从而在提高 SQL 语句的准确性的同时,也大大提高了开发人员的效率。本文主要介绍这几个动态SQL .

具体示例

if标签 if就是用来对输入映射的字段进行判断 一般是非空判断 null 和""。

1.  <!--  案例 1 :动态 sql if -->   

2.  <select   id = "selectUsersIf"   parameterType = "user"   resultType = "user" >   

3.      select * from users where  1 =1   

4.       <if   test = "uname!=null and uname!=''" >  and uname like "%"#{uname}"%"  </if>    

5.       <if   test = "sex!=null and sex!=''" > and  sex  = #{sex}  </if>    

6.  </select>   

动态 SQL <where /> 相当于 where 关键字 <where /> 可以自动处理第一个前 and 或者 or 。 当条件都没有的时候 where 也不会加上 。

1.  <!--  案例 2 :动态 sql where  可以自动处理第一个前 and  或者 or 。当条件都没有的时候   where 也不会加上   -->   

2.  <select   id = "selectUsersWhere"   parameterType = "user"   resultType = "user" >   

3.      select * from users   

4.       <where>   

5.       <if   test = "uname!=null and uname!=''" >  and uname like "%"#{uname}"%"  </if>    

6.       <if   test = "sex!=null and sex!=''" > and  sex  = #{sex}  </if>    

7.       </where>  

choose when--when--otherwise when 可以多个 otherwise 只能有一个 类似于 switch case

需求:输入用户 id 按照用户 id 进行精确查找  其他条件不看  没有输入   id   用户名模糊查找 都没有的话  查询 id=1 的用户

1.  <!--  案例 3 :动态 sql choose—when when otherwise -->   

2.    

3.  <select   id = "selectUsersChoose"   parameterType = "user"   resultType = "user" >   

4.      select * from users   

5.       <where>   

6.               <choose>   

7.                   <when   test = "uid!=null" >   uid =#{uid} </when>   

8.                   <when   test = "uname!=null and uname!=''" >  uname like "%"#{uname}"%" </when>   

9.                   <otherwise> uid = 1 </otherwise>   

10.                

11.               </choose>    

12.       </where>   

13.  </select>

动态 sql set 代替 set 关键字 set 标签可以帮助我们去掉最后一个逗号

1.  <update   id = "updateSet"   parameterType = "user" >   

2.      

3.      update users    

4.        

5.     <set>   

6.       <if   test = "uname!=null and uname!=''" >   uname  =#{uname}, </if>   

7.       <if   test = "upwd!=null and upwd!=''" >   upwd  =#{upwd}, </if>   

8.       <if   test = "sex!=null and sex!=''" >   sex  =#{sex}, </if>   

9.       <if   test = "birthday!=null" >   birthday  =#{birthday}, </if>   

10.     </set>   

11.      where   uid =#{uid}  

12.     </update>   

Trim trim 代替 where

1.  <!--  案例 5 :动态 sql trim   代替 where      -->   

2.       <select   id = "selectUsersTrimWhere"   parameterType = "user"   resultType = "user" >   

3.      select * from users   

4.      <!--   

5.      prefix: 指添加前缀修饰   

6.      suffix: 添加后缀修饰   

7.      prefixOverrides :去掉前缀修饰   

8.      suffixOverrides :去掉后缀修饰   

9.       -- >   

10.  < trim  prefix = "where"    prefixOverrides = "and|or"   >   

11.  <if   test = "uname!=null and uname!=''" >  and uname like "%"#{uname}"%"  </if>    

12.  <if   test = "sex!=null and sex!=''" > and  sex  = #{sex}  </if>    

13.  </trim>   

14.  </select>   

Trim 代替 set :

1.         <!--  案例 6 :动态 sql trim   代替 set    -->   

2.         <update   id = "updateTrimSet"   parameterType = "user" >   

3.    

4.  update users    

5.        

6.     <trim   prefix = "set"   suffixOverrides = ","   suffix = "where  uid=#{uid}"   >   

7.       <if   test = "uname!=null and uname!=''" >   uname  =#{uname}, </if>   

8.       <if   test = "upwd!=null and upwd!=''" >   upwd  =#{upwd}, </if>   

9.       <if   test = "sex!=null and sex!=''" >   sex  =#{sex}, </if>   

10.       <if   test = "birthday!=null" >   birthday  =#{birthday}, </if>   

11.     </trim>   

12.        

F oreach 来遍历集合

1.  <!-- 案例 7: 动态 sql foreach    遍历数组   -->   

2.  <select   id = "selectUsersForeachArray"    resultType = "user" >   

3.      select * from users  where uid  in    

4.      <!--   

5.          collection: 要遍历的集合   

6.          item: 当前正在遍历的对象的变量名   

7.          open: 开始遍历   

8.          close: 结束便利   

9.          index: 下标   

10.          separator: 分割   

11.       -- >   

12.       <foreach   collection = "array"   item = "item"   open = "("   close = ")"   index = "index"   separator = "," >   

13.          #{item}  

14.       </foreach>   

15.    

16.  </select>   

 

总结

熟练掌握以上 Mysql 的动态 SQL , 我们可以更得心应手的完成我的功能,写更少的代码,实现更多的功能。


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI