动态 SQL:
动态SQL 是Mybatis的强⼤特性之⼀,能够完成不同条件下不同的 sql 拼接。
1. <if> 标签:
Mapper.xml实现:
<insert id="insertByCondition">
insert into userinfo (username, password, age
<if test="gender != null">
, gender
</if>
) values (#{username}, #{password}, #{age}
<if test="gender != null">
, #{gender}
</if>
)
</insert>
2. <trim>标签
-
prefix:表示整个语句块,以prefix的值作为前缀
-
suffix:表示整个语句块,以suffix的值作为后缀
-
prefixOverrides:表示整个语句块要去除掉的前缀
-
suffixOverrides:表示整个语句块要去除掉的后缀
Mapper.xml实现:
<insert id="insertByCondition">
insert into userinfo
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="username!=null">
username,
</if>
<if test="password !=null">
password,
</if>
<if test="age !=null">
age,
</if>
<if test="gender != null">
gender
</if>
</trim>
values
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="username!=null">
#{username},
</if>
<if test="password !=null">
#{password},
</if>
<if test="age !=null">
#{age},
</if>
<if test="gender !=null">
#{gender}
</if>
</trim>
</insert>
在以上sql动态解析时,会做如下处理:
- 基于prefix配置,开始部分加上 (
- 基于suffix配置,结束部分加上 )
- 多个组织的语句都以 逗号 结尾,在最后拼接好的字符串还会以 逗号 结尾,会基于suffixOverrides配置去掉最后一个 逗号
注解实现方式(不推荐):
@Insert("<script>" +
"insert into userinfo " +
"<trim prefix='(' suffix=')' suffixOverrides=','> " +
" <if test='username!=null'>username,</if> " +
" <if test='password !=null'>password,</if

最低0.47元/天 解锁文章
872

被折叠的 条评论
为什么被折叠?



