软件开发初级动态SQL语句

作者介绍

尹德华软件开发工程师

微软认证开发专家(MCPD),多年企业应用开发经验,精通.Net平台应用软件开发与维护,嘉为科技软件开发工程师。

摘要

MyBatis的强大特性之一便是它的动态SQL。如果你有使用JDBC或其他类似框架的经验,你就能体会到根据不同条件拼接SQL语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态SQL这一特性可以彻底摆脱这种痛苦。

通常使用动态SQL不可能是独立的一部分,MyBatis当然使用一种强大的动态SQL语言来改进这种情形,这种语言可以被用在任意的SQL映射语句中。

动态SQL元素和使用JSTL或其他类似基于XML的文本处理器相似。在MyBatis之前的版本中,有很多的元素需要来了解。MyBatis大大提升了它们,现在用不到原先一半的元素就可以了。

·if

·choose(when,otherwise)

·trim(where,set)

正文

if

动态SQL通常要做的事情是有条件地包含where子句的一部分。比如:

这条语句提供了一个可选的文本查找类型的功能。如果没有传入“name”,那么所有处于“ACTIVE”状态的parameterType类型数据都会返回;反之若传入了“name”,那么就会把模糊查找“name”内容的数据结果返回。

如果想通过两个不同条件来查询,比如说name和age;

choose,when,otherwise

有些时候,我们不想用到所有的条件语句,而只想从中择其一二。针对这种情况,MyBatis提供了choose元素。

还是上面的列子,不同的是这次变为了提供了name就按name查询,提供了age就按查询,若两者都没有提供,就返回所有符合条件的Vacation。

trim,where,set

前面几个例子已经合宜地解决了一个动态SQL问题。现在考虑回到“if”示例,这次我们将“ACTIVE=1”也设置成动态的条件,看看会发生什么。

如果这些条件一个都没匹配到的话,SQL语句最终会成这样:

SELECT*FROMt_vacationmr

WHERE

这会导致查询失败。如果只是第二个条件匹配又会怎样:

SELECT*FROMt_vacationmr

WHERE

ANDnamelike‘anyname’

这个查询也会失败。这个问题不能简单的用条件句式来解决。

MyBatis有一个简单的处理,这在90%的情况下都会有用。而在不能使用的地方,你可以自定义处理方式来令其正常工作。一处简单的修改就能得到想要的效果:

where元素知道只有在一个以上的if条件有值的情况下才去插入“WHERE”子句。而且,若最后的内容是“AND”或“OR”开头的,where元素也知道如何将他们去除。

学领未来

学领未来,嘉为教育旗下泛IT职业发展学习服务平台,专注于提供包括职业发展与成长顾问、能力评测与提升建议、学习资源与学习管理、人才评价与认证服务的立体化学习服务。

学习引领更好的未来!常







































北京专门治疗白癜风的医院
北京白癜风怎么治


转载请注明地址:http://www.yujinxiangqiangzhi.com/rjcs/5540.html


  • 上一篇文章:
  • 下一篇文章: 没有了
  • 公司简介 广告合作 发布优势 服务条款 隐私保护 网站地图 版权声明