mybatis进阶篇----动态sql的操作
动态 SQL,主要用于解决查询条件不确定的情况:在程序运行期间,根据用户提交的查
询条件进行查询。提交的查询条件不同,执行的 SQL 语句不同。若将每种可能的情况均逐一
列出,对所有条件进行排列组合,将会出现大量的 SQL 语句。此时,可使用动态 SQL 来解
决这样的问题。
比如我们要操作多条件查询,那这样的操作组合会有很多
单单从年龄和成绩的组合比如年龄从15到20,或者20到60,或者21到59.或者等等
在从成绩上来说60到70,70到80,80到90,这些组合就也是有9种情况,这样的查询操作就不能只是单单的对他们进行一次的查询了,这就需要动态的sql来对他们进行一系列的操作了。
这里的条件判断使用的表达式为 OGNL 表达式。常用的动态 SQL 标签有<if>、<where>、
<choose/>、<foreach>等。
有一个有意思的发现是,MyBatis 的动态 SQL 语句,与 JSTL 中的语句非常相似。
这里的条件判断使用的表达式为 OGNL 表达式。常用的动态 SQL 标签有<if>、<where>、
<choose/>、<foreach>等。
在 mapper 的动态 SQL 中若出现大于号(>)、小于号(<)、大于等于号(>=),小于等
于号(<=)等符号,最好将其转换为实体符号。否则,XML 可能会出现解析出错问题。
特别是对于小于号(<),在 XML 中是绝对不能出现的。否则,一定出错。

<if/>标签
对于该标签的执行,当 test 的值为 true 时,会将其包含的 SQL 片断拼接到其所在的 SQL
语句中。
本例实现的功能是:查询出满足用户提交查询条件的所有学生。用户提交的查询条件可
以包含一个姓名的模糊查询,同时还可以包含一个年龄的下限。当然,用户在提交表单时可
能两个条件均做出了设定,也可能两个条件均不做设定,也可以只做其中一项设定。
这引发的问题是,查询条件不确定,查询条件依赖于用户提交的内容。此时,就可使用
动态 SQL 语句,根据用户提交内容对将要执行的 SQL 进行拼接如图

这个是dao的设置

之后在mytest的
在参数是传入的一个学生的实体类对象 ,这个是会再映射的Mapper里自动去查询条件的对象。
查询结果

<foreach/>标签用于实现对于数组与集合的遍历。对其使用,需要注意:
collection 表示要遍历的集合类型,这里是数组,即 array。
open、close、separator 为对遍历内容的 SQL 拼接。

这个select的语句想当于,select * from XXX where id in (1,3)
<sql/> 标签
<sql/>标签用于定义 SQL 片断,以便其它 SQL 标签复用。而其它标签使用该 SQL 片断,
需要使用<include/>子标签。该<sql/>标签可以定义 SQL 语句中的任何部分,所以<include/>
子标签可以放在动态 SQL 的任何位置。
注意:其中 stu是学生对象,stu.id是对应stu的id
浙公网安备 33010602011771号