mybatis框架xml下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è)條件前面沒(méi)有任何符號(hào),第二個(gè)條件要加上and,否則sql語(yǔ)句會(huì)報(bào)錯(cuò)。很理想的狀態(tài)是第一個(gè)和第二個(gè)都有值,但是既然判斷,說(shuō)明也可能會(huì)沒(méi)有值,當(dāng)?shù)谝粋€(gè)name沒(méi)有值的時(shí)候,這個(gè)時(shí)候sql語(yǔ)句就會(huì)是 select * from User where and age=’’,很明顯這個(gè)sql語(yǔ)句語(yǔ)法存在問(wèn)題。
在這里標(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 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=','的話(huà),本例中最后一個(gè)條件中的逗號(hào)“,”會(huì)被后綴覆蓋掉
mybatis之 trim prefix='(' suffix=')'1.如下所示<trim prefix='' suffix='' suffixOverrides='' prefixOverrides=''></trim>
prefix:在trim標(biāo)簽內(nèi)sql語(yǔ)句加上前綴。
suffix:在trim標(biāo)簽內(nèi)sql語(yǔ)句加上后綴。
suffixOverrides:指定去除多余的后綴內(nèi)容,如:suffixOverrides=',',去除trim標(biāo)簽內(nèi)sql語(yǔ)句多余的后綴','。
prefixOverrides:指定去除多余的前綴內(nèi)容
2.下面是一個(gè)往購(gòu)物車(chē)表中插入數(shù)據(jù)的mybatis語(yǔ)句<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語(yǔ)句也許是這樣的:insert into cart (id,user_id,deal_id,) values(1,2,1,);顯然是錯(cuò)誤的
指定之后語(yǔ)句就會(huì)變成insert into cart (id,user_id,deal_id) values(1,2,1);這樣就將“,”去掉了。
前綴也是一個(gè)道理這里就不說(shuō)了。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. Mysql入門(mén)系列:在MYSQL結(jié)果集上執(zhí)行計(jì)算2. MySQL創(chuàng)始人發(fā)郵件尋求中國(guó)幫助3. 巧用SQL語(yǔ)言在ACCESS數(shù)據(jù)庫(kù)中批量替換內(nèi)容4. Mysql入門(mén)系列:建立MYSQL客戶(hù)機(jī)程序的一般過(guò)程5. Mysql故障排除:Starting MySQL. ERROR! Manager of pid-file quit without updating file6. MySQL插入數(shù)據(jù)時(shí),如果記錄不存在則insert,如果存在則update7. oracle觸發(fā)器介紹8. MYSQL(電話(huà)號(hào)碼,身份證)數(shù)據(jù)脫敏的實(shí)現(xiàn)9. Mysql入門(mén)系列:對(duì)MYSQL查詢(xún)中有疑問(wèn)的數(shù)據(jù)進(jìn)行編碼10. MySQL存儲(chǔ)引擎選擇InnoDB還是MyISAM

網(wǎng)公網(wǎng)安備