好程序员Java分享Mybatis必会的动态SQL
好程序员Java分享Mybatis必会的动态SQL,前言:
Mybatis可谓是java开发者必须会的一项技能。MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。
Mybatis动态sqlmybatis 动态SQL,通过 if, choose, when, otherwise, trim, where, set, foreach等标签,可组合成非常灵活的SQL语句,从而在提高 SQL 语句的准确性的同时,也大大提高了开发人员的效率。本文主要介绍这几个动态SQL.
具体示例if标签 if就是用来对输入映射的字段进行判断 一般是非空判断 null 和""。
1.<!--案例1:动态sql之if-->
2.<selectid="selectUsersIf"parameterType="user"resultType="user">
3.select*fromuserswhere1=1
4.<iftest="uname!=nullanduname!=''">andunamelike"%"#{uname}"%"</if>
5.<iftest="sex!=nullandsex!=''">andsex=#{sex}</if>
6.</select>
动态SQL <where /> 相当于 where关键字 <where />可以自动处理第一个前and 或者or。 当条件都没有的时候 where也不会加上 。
1.<!--案例2:动态sql之where可以自动处理第一个前and或者or。当条件都没有的时候where也不会加上-->
2.<selectid="selectUsersWhere"parameterType="user"resultType="user">
3.select*fromusers
4.<where>
5.<iftest="uname!=nullanduname!=''">andunamelike"%"#{uname}"%"</if>
6.<iftest="sex!=nullandsex!=''">andsex=#{sex}</if>
7.</where>
choose—when--when--otherwise when可以多个 otherwise只能有一个 类似于 switch case。
需求:输入用户id 按照用户id进行精确查找 其他条件不看 没有输入 id 用户名模糊查找 都没有的话 查询id=1的用户
1.<!--案例3:动态sql之choose—whenwhenotherwise-->
2.
3.<selectid="selectUsersChoose"parameterType="user"resultType="user">
4.select*fromusers
5.<where>
6.<choose>
7.<whentest="uid!=null">uid=#{uid}</when>
8.<whentest="uname!=nullanduname!=''">unamelike"%"#{uname}"%"</when>
9.<otherwise>uid=1</otherwise>
10.
11.</choose>
12.</where>
13.</select>
动态sql之set 代替set关键字 set标签可以帮助我们去掉最后一个逗号
1.<updateid="updateSet"parameterType="user">
2.
3.updateusers
4.
5.<set>
6.<iftest="uname!=nullanduname!=''">uname=#{uname},</if>
7.<iftest="upwd!=nullandupwd!=''">upwd=#{upwd},</if>
8.<iftest="sex!=nullandsex!=''">sex=#{sex},</if>
9.<iftest="birthday!=null">birthday=#{birthday},</if>
10.</set>
11.whereuid=#{uid}
12.</update>
Trim,trim代替where
1.<!--案例5:动态sql之trim代替where-->
2.<selectid="selectUsersTrimWhere"parameterType="user"resultType="user">
3.select*fromusers
4.<!--
5.prefix:指添加前缀修饰
6.suffix:添加后缀修饰
7.prefixOverrides:去掉前缀修饰
8.suffixOverrides:去掉后缀修饰
9.-->
10.<trimprefix="where"prefixOverrides="and|or">
11.<iftest="uname!=nullanduname!=''">andunamelike"%"#{uname}"%"</if>
12.<iftest="sex!=nullandsex!=''">andsex=#{sex}</if>
13.</trim>
14.</select>
Trim代替set:
1.<!--案例6:动态sql之trim代替set-->
2.<updateid="updateTrimSet"parameterType="user">
3.
4.updateusers
5.
6.<trimprefix="set"suffixOverrides=","suffix="whereuid=#{uid}">
7.<iftest="uname!=nullanduname!=''">uname=#{uname},</if>
8.<iftest="upwd!=nullandupwd!=''">upwd=#{upwd},</if>
9.<iftest="sex!=nullandsex!=''">sex=#{sex},</if>
10.<iftest="birthday!=null">birthday=#{birthday},</if>
11.</trim>
12.
Foreach来遍历集合
1.<!--案例7:动态sql之foreach遍历数组-->
2.<selectid="selectUsersForeachArray"resultType="user">
3.select*fromuserswhereuidin
4.<!--
5.collection:要遍历的集合
6.item:当前正在遍历的对象的变量名
7.open:开始遍历
8.close:结束便利
9.index:下标
10.separator:分割
11.-->
12.<foreachcollection="array"item="item"open="("close=")"index="index"separator=",">
13.#{item}
14.</foreach>
15.
16.</select>
总结熟练掌握以上Mysql的动态SQL,我们可以更得心应手的完成我的功能,写更少的代码,实现更多的功能。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。