028-86261949

当前位置:首页 > 技术交流 > MyBatis中的动态SQL

MyBatis中的动态SQL

2018/11/26 10:43 分类: 技术交流 浏览:29

MyBatis 的强大特性之一便是它的动态 SQL。如果有使用JDBC或其他类似框架的经验,就能体会到根据不同条件拼接SQL语句的痛苦。
MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素;
[size=10.5000pt]1. if
动态SQL通常要做的事情是有条件地包含where子句的一部分。如:
 
 
注释后的结果:
 
开启后的结果:
[size=10.5000pt]2. choose
有些时候,不想用到所有的条件语句,而只想从中择其一二。针对这种情况,MyBatis提供了choose元素,它有点像Java中的switch语句:
 
 
设置class属性,不设置学生姓名,则班级ID为条件查询(其他条件忽略):
 
设置学生姓名,不设置class属性,则学生姓名为查询条件:
 
没有设置任何属性的值:
[size=10.5000pt]3. where和trim
在之前的示例中,使用了1=1这种明确为true的条件来解决应该插入where还是插入and|or的问题,而新版本的MyBatis提供了新标签(where、trim)来使用更优雅的方式来解决这个问题:
 
如果where元素失效,还可以通过自定义trim元素来定制想要的功能。比如,和上例where元素等价的自定义trim元素为:

 
[size=10.5000pt]4. set
类似的用于动态更新语句的解决方案叫做set。set 元素可以被用于动态包含需要更新的列,而舍去其他的。如:
 
也能使用等价的自定义trim元素完成同等功能,结果如下:

 

之前在插入数据时介绍的foreach节点也是一个构建动态SQL的利器,它能够利用自动迭代一个集合,完成SQL语句的生成
 
#标签:MyBatis,动态SQL,Java培训