动态sql
一、动态SQL的概念
1、什么是动态SQL
定义:根据不同条件拼接SQL语句,实现对数据库更准确的操作。
实现:映射器配置文件或者注解。
2、常用的动态SQL元素
1. choose元素(when、otherwise):多条件分支判断。
2. foreach元素:循环语句在in语句等列举条件常用。
3. if元素:判断语句,单条件分支判断。
4. trim(where、set):辅助元素,用于处理一些SQL拼接的问题。
5. bind元素:自定义上下文变量,传递参数。
二、动态SQL元素的使用
1、if元素的功能
语法:<if test="条件"> 满足条件的语句</if>
注意:拼接SQL语句的时候注意and和逗号。
<select id="findStudent" parameterType="Student" resultType="Student">
<!-- 加一个where 1=1的条件,就可以对各个条件进行查询,每个查询条件前面都要加上and -->
select * from student where 1=1
<!-- OGNL 表达式 对象图 导航语言 属性名 -->
<if test="ssex != null">
and ssex = #{ssex}
</if>
<if test="classid != 0">
and classid = #{classid};
</if>
</select>
2、choose、when、otherwise元素
语法:
<choose>
<when test=“条件”>满足条件的语句</ when>
<otherwise> 满足其他条件的语句 <otherwise>
</choose>
注意:拼接 SQL 语句的时候注意 AND 和逗号。
3、trim 、where 、set 元素
1. where元素
语法:
<where>
<if test =”条件”> 满足条件的语句 </if>
</where>
说明:where 元素只会在至少有一个子元素的条件返回 SQL 子句的情况下才去插入“WHERE”子句。而且,若语句的开头为“AND”或“OR”,where 元素也会将它们去除。
2. set元素
语法:
<set>
<if test =”条件”> 满足条件的语句 </if>
</set>
说明:set 标签元素主要是用在更新操作的时候,它的主要功能和 where 标签元素其实是差不多的,主要是在包含的语句前输出一个 set,然后如果包含的语句是以逗号结束的话将会把该逗号忽略,如果 set 包含的内容为空的话则会出错。有了 set 元素就可以动态的更新那些修改了的字段。
3. trim 元素