概念
- sql的内容是变化的,同一个dao方法,根据条件获取到不同的sql语句。 主要是where部分发生变化。
- 动态sql的实现,使用的是mybatis提供的标签,主要包括
, , - 什么时候使用动态sql:多条件查询时
1、IF
<if test="判断java对象的属性值">
部分sql语句
</if>
2、where
2.1概念
使用if标签容易引起sql语法错误,使用where可以解决if产生的语法问题
使用where,里面有一个或多个if,当有一个if标签判断条件为真时,where会转换为WHERE关键字附加到sql语句后面。如果if没有一个条件为true,忽略where和里面的if
语法
<where>
<if test="条件1">sql语句1</if>
<if test="条件2">sql语句2</if>
</where>
3、foreach循环
使用foreach可以循环数组、list集合,一般使用在in语句中
<foreach collection="集合类型" open="开始的字符" close="结束的字符"
item="集合中的成员" separator="集合成员之间的分隔符">
#{item的值}
</foreach>
标签属性
collection:表示接口中的方法参数的类型, 如果是数组使用array , 如果是list集合使用list
item:自定义的,表示数组和集合成员的变量
open:循环开始是的字符
close:循环结束时的字符
separator:集合成员之间的分隔符
例子:学生id是 1001,1002,1003的三个学生
遍历 List<对象类型 >
4、sql代码片段
sql标签标示一段sql代码,可以是表名,几个字段,where条件都可以,可以在其他地方复用sql标签的内容
步骤
1.先定义 <sql id="自定义名称唯一"> sql语句, 表名,字段等 </sql>
2.再使用, <include refid="id的值" />