Select * from tableName where
a=1 and b=2 and c=3
d like '%a%' or e like '%b%'
那么 Where 的部分可以使用 Where 的功能,这样写:
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG
<where>
<if test="state != null">
state = #{state}
<if test="title != null">
AND title like #{title}
<if test="author != null and author.name != null">
AND author_name like #{author.name}
</where>
</select>
可以看到 Where 条件中包含 if 条件语句,也就是可能存在根本没有条件的可能,那么使用 <where> 标签,就能够实现如果没有任何条件的话,就不添加 Where 关键词的功能;同时还可以将条件语句中存在的第一个 AND 去掉。
但是遇到有一部分字段是 or 关系的情况怎么办呢?
<trim> 就能实现这样一个神奇的功能!
先看几个官方的例子:
<trim prefix="WHERE" prefixOverrides="AND |OR ">
</trim>
这个就可以代码上面的 <where> 标签的功能,使用方法就是用它来代替 <where> 标签。
再看看代替 <set> 标签的方法:
<update id="updateAuthorIfNecessary">
update Author
<if test="username != null">username=#{username},</if>
<if test="password != null">password=#{password},</if>
<if test="email != null">email=#{email},</if>
<if test="bio != null">bio=#{bio}</if>
where id=#{id}
</update>
代替方法:
<trim prefix="SET" suffixOverrides=",">
</trim>
嗯嗯,它的用法你是不是已经学会了呢?
<trim> 标签属性:prefix 要添加的前缀,suffix 要添加的后缀,prefixOverrides 要去掉的语句前面部分的内容,suffixOverrides 要去掉的语句后面部分的内容。
需求实现方法:
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG
<where>
<if test="state != null">
state = #{state}
<if test="title != null">
AND title like #{title}
<if test="author != null and author.name != null">
AND author_name like #{author.name}
<trim prefix="AND (" suffix=")" prefixOverrides="OR ">
<if test="title != null">
OR title like #{title}
<if test="author != null and author.name != null">
OR author_name like #{author.name}
</trim>
</where>
</select>
你看懂了吗?
官方文档只是给了简单的例子,标签都有哪些属性也没有全部列出来。
学习的时候还要连蒙带猜的。
MyBatis 学习笔记(八)---源码分析篇--SQL 执行过程详细分析
在面试中我们经常会被到MyBatis中 #{} 占位符与${}占位符的区别。大多数的小伙伴都可以脱口而出#{} 会对值进行转义,防止SQL注入。而${}则会原样输出传入值,不会对传入值做任何处理。本文将通过源码层面分析为啥#{} 可以防止SQL注入。
MyBatis 学习笔记(七)---源码分析篇---SQL的执行过程(一)
接上一篇,今天我们接着来分析MyBatis的源码。今天的分析的核心是SQL的执行过程。主要分为如下章节进行分析
MyBatis的应用,SpringBoot整合MyBatis
SpringBoot整合MyBatis最大的特点就是省事,相比于Spring整合MyBatis来讲,省了很多的步骤,并且操作简单,容易弄懂。