动态 SQL 是 MyBatis 一个强大的特性之一。如果你有使用 JDBC 或其他相似框架的经验,你就明白条件地串联 SQL 字符串在一起是多么的痛苦,确保不能忘了空格或在列表的最后省略逗号。例如:
String sql = "select u.*, b.*, uc.* from `user` u " + " JOIN `user_book` ub on u.user_id=ub.book_id" + " JOIN `book` b on b.book_id=ub.book_id" + " JOIN `book_ext` be on be.book_id=b.book_id" + " JOIN `user_contact` uc on uc.user_id=u.user_id";
动态 SQL 可以彻底处理这种痛苦。通常使用动态 SQL 不可能是独立的一部分, MyBatis 当然使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意映射的 SQL 语句中。
动态 SQL 元素和使用 JSTL(Java server pages standarded tag library,即JSP标准标签库) 或其他相似的基于 XML 的文本处理器相似。 在 MyBatis 之前的版本中,有很多的元素需要来了解。 MyBatis3 大大提升了它们,现在用不到原先一半的元素就能工作了。
MyBatis 采用功能强大的基于 OGNL(Object Graph Navigation Language,对象导航语言)的表达式来消除其他元素。MyBatis 动态 SQL 元素如下:
if:作用和 Java 的 if 语句一致,用来根据条件动态决定是否执行 if 语句内部的 SQL 脚本。
choose(when,otherwise):作用和 Java 的 switch 语句一致,用来处理多条件判断。
trim(where,set):作用和 Java 中 String 类的 tirm() 方法类似,去除 SQL 字符串前后的字符。
foreach:作用和 Java 中的 for 语句一致,用来根据传递的列表动态生成批量 SQL 脚本,例如:批量插入
在后续章节将详细介绍上面每个标签的具体用法和注意事项!
去去去
很抱歉没有帮助到你,谢谢支持!