Mybatis动态sql技术
Posted whhhd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis动态sql技术相关的知识,希望对你有一定的参考价值。
MyBatis中常用动态SQL:
choose when otherwise if trim where foreach
1,<if>元素被用来有条件地嵌入SQL片段,如果测试条件被赋值为true,则相应地SQL片段将会被添加到SQL语句中。
<select id="searchCourses" parameterType="map" resultMap="CourseResult">
SELECT * FROM COURSES
WHERE TUTOR_ID= #{tutorId}
<if test="courseName != null">
AND NAME LIKE #{courseName}
</if>
<......>
</select>
2,choose,when 和 otherwise 条件(相当于if ,else if,else)
select * from test where 1 = 1
<choose>
<when test="a!= null">
and a= #{a}
</when>
<when test="b!= null">
and b= #{b}
</when>
<otherwise>
and c = #{c}
</otherwise>
</choose>
3.foreach
4.trim
<trim>标签属性:
-
- prefix:当trim元素包含内容时,会给内容增加prefix指定的前缀
- prefixOverride:当trim元素包含内容时,会把内容中匹配的前缀字符串去掉。
- suffix:当trim元素包含内容时,会给内容增加prefix指定的后缀
- suffixOverride:当trim元素包含内容时,会把内容中匹配的后缀字符串去掉。
<where>和<set>标签都可以用trim标签实现,并且底层就是通过TrimSqlNode实现的。
5.where(常用于select语句)
where标签的作用:如果该标签包含的元素中有返回值,就插入一个where;如果where后面的字符是以AND和OR开头的,就讲他们剔除。
<select id="findUserByWhere" resultType="User">
SELECT * FROM user
<where>
<if test="name != null and name != \'\'">
AND name LIKE concat(\'%\', #{name}, \'%\')
</if>
<if test="phone !=null and phone !=\'\'">
OR phone=#{phone}
</if>
</where>
</select>
6.set(常用于update语句)
标签的作用:如果该标签包含的元素中有返回值,就插入一个set;如果set后面的字符串是以逗号结尾的,就将这个逗号剔除。
<update id="updateUser">
UPDATE user
<set>
<if test="user.email != null and user.email != \'\'">email=#{user.email},</if>
<if test="user.phone != null and user.phone != \'\'">phone=#{user.phone},</if>
</set>
WHERE uid=#{user.uid}
</update>
以上是关于Mybatis动态sql技术的主要内容,如果未能解决你的问题,请参考以下文章