概念

  • sql的内容是变化的,同一个dao方法,根据条件获取到不同的sql语句。 主要是where部分发生变化。
  • 动态sql的实现,使用的是mybatis提供的标签,主要包括 ,,
  • 什么时候使用动态sql:多条件查询时

image.png

1、IF

是判断条件的,语法如下:

  1. <if test="判断java对象的属性值">
  2. 部分sql语句
  3. </if>

image.png
image.png

2、where

2.1概念

用来包含多个的, 当多个if有一个成立的, 会自动增加一个where关键字,并去掉 if中多余的 and ,or等。
使用if标签容易引起sql语法错误,使用where可以解决if产生的语法问题
使用where,里面有一个或多个if,当有一个if标签判断条件为真时,where会转换为WHERE关键字附加到sql语句后面。如果if没有一个条件为true,忽略where和里面的if

  1. 语法
  2. <where>
  3. <if test="条件1">sql语句1</if>
  4. <if test="条件2">sql语句2</if>
  5. </where>

image.png

3、foreach循环

使用foreach可以循环数组、list集合,一般使用在in语句中

  1. <foreach collection="集合类型" open="开始的字符" close="结束的字符"
  2. item="集合中的成员" separator="集合成员之间的分隔符">
  3. #{item的值}
  4. </foreach>
  5. 标签属性
  6. collection:表示接口中的方法参数的类型, 如果是数组使用array , 如果是list集合使用list
  7. item:自定义的,表示数组和集合成员的变量
  8. open:循环开始是的字符
  9. close:循环结束时的字符
  10. separator:集合成员之间的分隔符

例子:学生id是 1001,1002,1003的三个学生
image.png
image.png
遍历 List<对象类型 >
image.png
image.png


4、sql代码片段

sql标签标示一段sql代码,可以是表名,几个字段,where条件都可以,可以在其他地方复用sql标签的内容

  1. 步骤
  2. 1.先定义 <sql id="自定义名称唯一"> sql语句, 表名,字段等 </sql>
  3. 2.再使用, <include refid="id的值" />

image.png