mybatis框架xml下trim中的prefix與suffix等標(biāo)簽的用法
trim中prefix與suffix等標(biāo)簽用法
1.prefix
前綴增加的內(nèi)容
2.suffix
后綴增加的內(nèi)容
3.prefixOverrides
前綴需要覆蓋的內(nèi)容,一般是第一個判斷條件前面的多余的結(jié)構(gòu),如:第一個判斷條件前面多了 ‘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>
第一個條件前面沒有任何符號,第二個條件要加上and,否則sql語句會報錯。很理想的狀態(tài)是第一個和第二個都有值,但是既然判斷,說明也可能會沒有值,當(dāng)?shù)谝粋€name沒有值的時候,這個時候sql語句就會是 select * from User where and age='',很明顯這個sql語句語法存在問題。
在這里標(biāo)簽屬性prefixOverrides就起作用了,它會讓前綴where覆蓋掉第一個and。覆蓋之后的是:select * from User where age='';
4.suffixOverrides
后綴需要覆蓋的內(nèi)容,一般是最后一個數(shù)據(jù)的后面符號,如:set值的時候,最后一個值的后面多一個逗號‘,'
<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=","的話,本例中最后一個條件中的逗號“,”會被后綴覆蓋掉
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.下面是一個往購物車表中插入數(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,);顯然是錯誤的
指定之后語句就會變成insert into cart (id,user_id,deal_id) values(1,2,1);這樣就將“,”去掉了。
前綴也是一個道理這里就不說了。
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java PriorityQueue數(shù)據(jù)結(jié)構(gòu)接口原理及用法
這篇文章主要介紹了Java PriorityQueue數(shù)據(jù)結(jié)構(gòu)接口原理及用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10MyBatis動態(tài)創(chuàng)建表的實(shí)例代碼
在項(xiàng)目需求中,我們經(jīng)常會遇到動態(tài)操作數(shù)據(jù)表的需求,常見的我們會把日志、設(shè)備實(shí)時位置信息等存入數(shù)據(jù)表,并且以一定時間段生成一個表來存儲。接下來通過本文給大家介紹MyBatis動態(tài)創(chuàng)建表的方法,感興趣的朋友一起看看吧2018-07-07java實(shí)現(xiàn)調(diào)用http請求的五種常見方式
在實(shí)際開發(fā)過程中,我們經(jīng)常需要調(diào)用對方提供的接口或測試自己寫的接口是否合適,本文主要介紹了java實(shí)現(xiàn)調(diào)用http請求的四種常見方式,感興趣的可以了解一下2024-07-07淺談Mybatis中resultType為hashmap的情況
這篇文章主要介紹了淺談Mybatis中resultType為hashmap的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12Java實(shí)現(xiàn)解壓zip和rar包的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)解壓zip和rar包,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01