动态 SQL 是Mybatis的强?特性之?,能够完成不同条件下不同的 sql 拼接。
在注册??的时候,可能会有这样?个问题,如下图所?:
注册分为两种字段:必填字段和?必填字段,那如果在添加??的时候有不确定的字段传?,程序应该如何实现呢?
这个时候就需要使?动态标签 来判断了,?如添加的时候性别 gender 为?必填字段,具体实现如下:
Mapper.xml实现:
<select id="insertUserByCondition">
insert into userinfo (
<trim 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>
<if test="phone != null">
phone
</if>
</trim>
)
values (
<trim 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>
<if test="phone != null">
#{phone}
</if>
</trim>
)
</select>
或者使?注解?式(不推荐)
之前的插???功能,只是有?个 gender 字段可能是选填项,如果有多个字段,?般考虑使?标签结合标签,对多个字段都采取动态?成的?式。
标签中有如下属性:
对集合进?遍历时可以使?该标签。标签有如下属性:
问题分析:
在xml映射?件中配置的SQL,有时可能会存在很多重复的?段,此时就会存在很多冗余的代码
我们可以对重复的代码?段进?抽取,将其通过 <sql> 标签封装到?个SQL?段,然后再通过<include> 标签进?引?。