mybatis常用标签和动态查询

Java小课堂

分享人:张庆东

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

在日常开发中,基本的静态的查询情况已经足够对付。但有些时候,我们想寻求一个能够根据参数自动调整SQL查询的方法。如,学校教导主任发现一个学生违反校纪校规,但是并没有当场抓住该学生,于是,他通过已经掌握的学生信息如【性别】,【年纪】,【身高】等信息来查询符合条件的学生。但是,这些信息的数量每次得到的数量都是不同的。换句话说,我们在设计系统时,无法确定传入参数的数量。也没有获得一个足以唯一确定这个对象的主键【如学号】。这便需要使用到动态查询功能。

2.知识剖析

<if>

说明: 若符合  <if>标签中的条件,则在SQL语句上添加<if></if>内的条件

常见场景:应用场景广泛,若条件不为null,添加SQL语句,在update中最为常见,也可以在insert中使用,避免插入null,导致默认值失效,当然其他类型例如select也可以使用

<where>

说明:避免所有条件都为空的时候出现“select * from user where ”这种会出错的情况,当然我们也可以在where后面加入“1=1”简单的解决,但是有更简单的方法,何乐而不为呢?

<set>

<set>元素会动态前置 SET 关键字,同时也会消除无关的逗号,因为用了条件语句之后很可能就会在生成的赋值语句的后面留下这些逗号,和<where>相同,也是避免SQL语句出错而设置的一个标签

<choose>

说明:自带<when>和 <otherwise>两个标签,<when>标签可以有多个,若其中一个<when>内条件符合,则终止 <choose>;若无<when>条件符合,则采用<otherwise>中的语句

常见场景:复用单条件SQL语句,例如查找一个用户,按“年龄查找”,或按“性别”查找等

<foreach>

说明:遍历传入的List、collection或map参数,依次使用集合中的元素执行SQL语句

3.常见问题

如果没有mybatis,又想要使用动态查询怎么办?

4.解决方案

使用葡萄藤的工具类库,SQLUtil,将MAP转化为SQL语句,再使用JDBC或JDBCTemplate查询

5.编码实战

6.扩展思考

7.参考文献

1.CSDN:http://blog.csdn.net/ABCD898989/article/details/51218551

2.mybatis官方文档

8.更多讨论

今天的分享就到这里啦,欢迎大家提问和探讨!