mybatis框架xml下trim中的prefix與suffix等標(biāo)簽的用法
trim中prefix與suffix等標(biāo)簽用法
1.prefix 前綴增加的內(nèi)容
2.suffix 后綴增加的內(nèi)容
3.prefixOverrides 前綴需要覆蓋的內(nèi)容,一般是第一個(gè)判斷條件前面的多余的結(jié)構(gòu),如:第一個(gè)判斷條件前面多了 ‘a(chǎn)nd'
select * from User where name='zhangsan' and age='20';
<select id='queryUser'>
select * from User
<trim prefix='where' prefixOverrides='and'>
<if test="name != null and name != ''">
name = #{name}
</if>
<if test="age !=null and age !=''">
and age = #{age}
</if>
</trim>
<select>
第一個(gè)條件前面沒有任何符號(hào),第二個(gè)條件要加上and,否則sql語句會(huì)報(bào)錯(cuò)。很理想的狀態(tài)是第一個(gè)和第二個(gè)都有值,但是既然判斷,說明也可能會(huì)沒有值,當(dāng)?shù)谝粋€(gè)name沒有值的時(shí)候,這個(gè)時(shí)候sql語句就會(huì)是 select * from User where and age='',很明顯這個(gè)sql語句語法存在問題。
在這里標(biāo)簽屬性prefixOverrides就起作用了,它會(huì)讓前綴where覆蓋掉第一個(gè)and。覆蓋之后的是:select * from User where age='';
4.suffixOverrides 后綴需要覆蓋的內(nèi)容,一般是最后一個(gè)數(shù)據(jù)的后面符號(hào),如:set值的時(shí)候,最后一個(gè)值的后面多一個(gè)逗號(hào)‘,'
<insert id="insertSelective" parameterType="org.javaboy.vhr.model.Salary">
insert into salary
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="basicSalary != null">
basicSalary,
</if>
<if test="bonus != null">
bonus,
</if>
<if test="lunchSalary != null">
lunchSalary,
</if>
<if test="trafficSalary != null">
trafficSalary,
<if test="name != null">
name,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="basicSalary != null">
#{basicSalary,jdbcType=INTEGER},
</if>
<if test="bonus != null">
#{bonus,jdbcType=INTEGER},
</if>
<if test="lunchSalary != null">
#{lunchSalary,jdbcType=INTEGER},
</if>
<if test="trafficSalary != null">
#{trafficSalary,jdbcType=INTEGER},
</if>
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
</trim>
</insert>
加了suffixOverrides=","
結(jié)果:
insert into salary (id,basicSalary,bonus,lunchSalary,trafficSalary,name) values (#{id},#{basicSalary},#{bonus},#{lunchSalary},#{trafficSalary},#{name})
不加suffixOverrides=","
結(jié)果:
insert into salary (id,basicSalary,bonus,lunchSalary,trafficSalary,name,) values (#{id},#{basicSalary},#{bonus},#{lunchSalary},#{trafficSalary},#{name},)
加了suffixOverrides=","的話,本例中最后一個(gè)條件中的逗號(hào)“,”會(huì)被后綴覆蓋掉
mybatis之 trim prefix="(" suffix=")"
1.如下所示
<trim prefix="" suffix="" suffixOverrides="" prefixOverrides=""></trim>
prefix:在trim標(biāo)簽內(nèi)sql語句加上前綴。
suffix:在trim標(biāo)簽內(nèi)sql語句加上后綴。
suffixOverrides:指定去除多余的后綴內(nèi)容,如:suffixOverrides=",",去除trim標(biāo)簽內(nèi)sql語句多余的后綴","。
prefixOverrides:指定去除多余的前綴內(nèi)容
2.下面是一個(gè)往購物車表中插入數(shù)據(jù)的mybatis語句
<insert id="insert" parameterType="com.tortuousroad.groupon.cart.entity.Cart">
insert into cart
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="userId != null">
user_id,
</if>
<if test="dealId != null">
deal_id,
</if>
<if test="dealSkuId != null">
deal_sku_id,
</if>
<if test="count != null">
count,
</if>
<if test="createTime != null">
create_time,
</if>
<if test="updateTime != null">
update_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=BIGINT},
</if>
<if test="userId != null">
#{userId,jdbcType=BIGINT},
</if>
<if test="dealId != null">
#{dealId,jdbcType=BIGINT},
</if>
<if test="dealSkuId != null">
#{dealSkuId,jdbcType=BIGINT},
</if>
<if test="count != null">
#{count,jdbcType=INTEGER},
</if>
<if test="createTime != null">
#{createTime,jdbcType=TIMESTAMP},
</if>
<if test="updateTime != null">
#{updateTime,jdbcType=TIMESTAMP},
</if>
</trim>
</insert>
suffixOverrides=","
執(zhí)行的sql語句也許是這樣的:insert into cart (id,user_id,deal_id,) values(1,2,1,);顯然是錯(cuò)誤的
指定之后語句就會(huì)變成insert into cart (id,user_id,deal_id) values(1,2,1);這樣就將“,”去掉了。
前綴也是一個(gè)道理這里就不說了。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java實(shí)現(xiàn)簡(jiǎn)單租車系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單租車系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
mybatis-plus數(shù)據(jù)權(quán)限實(shí)現(xiàn)代碼
這篇文章主要介紹了mybatis-plus數(shù)據(jù)權(quán)限實(shí)現(xiàn),結(jié)合了mybatis-plus的插件方式,做出了自己的注解方式的數(shù)據(jù)權(quán)限,雖然可能存在一部分的局限性,但很好的解決了我們自己去解析SQL的功能,需要的朋友可以參考下2023-06-06
SpringBoot SSO輕松實(shí)現(xiàn)(附demo)
這篇文章主要介紹了SpringBoot SSO輕松實(shí)現(xiàn)(附demo),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
SpringBoot項(xiàng)目配置文件注釋亂碼的問題解決方案
這篇文章主要介紹了SpringBoot 項(xiàng)目配置文件注釋亂碼的問題解決方案,文中通過圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-07-07
Java基礎(chǔ)之?dāng)?shù)組的初始化過程
Java數(shù)組分為靜態(tài)和動(dòng)態(tài)初始化,靜態(tài)初始化中,程序員設(shè)定元素初始值,系統(tǒng)決定長(zhǎng)度;動(dòng)態(tài)初始化中,程序員設(shè)定長(zhǎng)度,系統(tǒng)提供初始值,數(shù)組初始化后長(zhǎng)度固定,存儲(chǔ)在堆內(nèi)存中,數(shù)組變量在棧內(nèi)存指向堆內(nèi)存數(shù)組對(duì)象,基本類型數(shù)組存儲(chǔ)數(shù)據(jù)值,引用類型數(shù)組存儲(chǔ)對(duì)象引用2024-10-10

