MyBatis XML去除多餘AND|OR前綴或逗號等後綴的操作

1.通過trim格式化標記set或where功能

2.對於set自動刪除最後一個“,”,對於where自動刪除最後一個“and|or”

使用示例如下:

1、

select * from user 
<trim prefix="WHERE" prefixOverride="AND |OR">
<if test="userName != null and userName.length()>0"> AND user_name=#{userName}</if>
<if test="loginName != null and loginName.length()>0"> AND login_name=#{loginName}</if>
</trim>

如果userName 為空則最終SQL為:

select * from user where login_name = 'xx'

prefix:前綴

prefixOverride:去掉第一個and或者是or

2、

update user
<trim prefix="set" suffixOverride="," suffix=" where user_id = #{userId} ">
<if test="userName != null and userName.length()>0"> user_name=#{userName} , </if>
<if test="loginName != null and loginName.length()>0"> login_name=#{loginName} , </if>
</trim>

如果userName 為空則最終SQL為:

update user set login_name='xx'  where user_id='xx'

suffixOverride:去掉最後一個逗號(也可以是其他的標記,就像是上面前綴中的and一樣)

suffix:後綴

補充:mybatis去除多餘的and或者or

啥也不多說瞭,大傢還是直接看代碼吧~

<select id="selectBySelective" resultType="xxx.UserInfo">
select
<include refid="Base_Column_List" />
from uc_user
<trim prefix="WHERE (" suffix=")" prefixOverrides="AND |OR ">
<if test="userName != null" >
user_name = #{userName}
</if>
<if test="email != null" >
or email = #{email}
</if>
<if test="phone != null" >
or phone = #{phone}
</if>
<if test="weiboId != null" >
or weibo_id = #{weiboId}
</if>
<if test="wxId != null" >
or wx_id = #{wxId}
</if> 
<if test="qqId != null" >
or qq_id = #{qqId}
</if>
</trim>
and status = 1
</select>

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀: