Mybatis中有關語句有多餘逗號的解決方式

2022-03-15 11:28:09 字數 4890 閱讀 9872

在使用mybatis進行crud時,會遇到判斷是否為空,從而導致有多餘逗號導致sql語句出問題的情況,這裡有幾種解決方式:

1.update語句更新時,解決多餘逗號問題(通過):

<

update

id="updatebyid"

parametertype

="com.wk.manactivity"

>

update man_activity

<

trim

prefix

="set"

suffixoverrides

=","

>

<

if test

="activitytype != null"

>

activity_type = #,

if>

<

if test

="client != null"

>

client = #,

if>

<

if test

="activitystatus != null"

>

activity_status = #,

if>

<

if test

="activityname != null"

>

activity_name = #,

if>

<

if test

="starttime != null"

>

start_time = #,

if>

<

if test

="endtime != null"

>

end_time = #,

if>

<

if test

="updatetime != null"

>

update_time = #,

if>

<

if test

="updateuser != null"

>

update_user = #,

if>

trim

>

where id = #

update

>

或者也可以使用標籤

<

update

id="updateauthorifnecessary"

>

update author

<

set>

<

if test

="username != null"

>

username=#,

if>

<

if test

="password != null"

>

password=#,

if>

<

if test

="email != null"

>

email=#,

if>

<

if test

="bio != null"

>

bio=#

if>

set>

where id=#

update

>

這裡,set 元素會動態前置 set 關鍵字,同時也會消除無關的逗號,因為用了條件語句之後很可能就會在生成的賦值語句的後面留下這些逗號。

<

update

id="updateauthorifnecessary"

>

update user

<

trim

prefix

="set"

suffixoverride

=","

suffix

=" where id = # "

>

<

if test

="name != null and name.length()>0"

> name=# ,

if>

<

if test

="gender != null and gender.length()>0"

> gender=# ,

if>

trim

>

update

>

假如說name和gender的值都不為null的話列印的sql為:update user set name='xx' , gender='xx'     where id='x'

在紅色標記的地方不存在逗號,而且自動加了乙個set字首和where字尾,上面三個屬性的意義如下,其中prefix意義如上:

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

suffix:字尾

2.where語句使用時遇到的問題(and或者or多餘的情況)

<

select

id="quaryqualitylist"

parametertype

="com.manqualityshop"

resultmap

="baseresultmap"

>

select * from user

<

trim

prefix

="where"

prefixoverride

="and |or"

>

<

if test

="name != null and name.length()>0"

> and name=#

if>

<

if test

="gender != null and gender.length()>0"

> and gender=#

if>

trim

>

select

>

假如說name和gender的值都不為null的話列印的sql為:select * from user where    name = 'xx' and gender = 'xx'

在紅色標記的地方是不存在第乙個and的,上面兩個屬性的意思如下:

prefix:字首      

prefixoverride:去掉第乙個and或者是or

也可以使用標籤

<

select

id="findactivebloglike"

resulttype

="blog"

>

select * from blog

<

where

>

<

if test

="state != null"

>

state = #

if>

<

if test

="title != null"

>

and title like #

if>

<

if test

="author != null and author.name != null"

>

and author_name like #

if>

where

>

select

>

3.標籤的作用

mybatis中sql標籤定義sql片段,include標籤引用,可以復用sql片段。

sql標籤中id屬性對應include標籤中的refid屬性。通過include標籤將sql片段和原sql片段進行拼接成乙個完整的sql語句進行執行。

<

sql

id="sqlid"

>

res_type_id,res_type

sql>

<

select

id="selectbyid"

resulttype

="com.property.vo.pubrestypevo"

>

select

<

include

refid

="sqlid"

/>

from pub_res_type

select

>

引用同乙個xml中的sql片段

<

include

refid

="sqlid"

/>

引用公用的sql片段

<

include

refid

="namespace.sqlid"

/>

mybatis插入資料的時候返回插入記錄的主鍵id在進行輸入庫插入的時候,如果我們需要使用已經插入的記錄的主鍵,則需要返回剛才插入的資料的主鍵id。

通過設定 insert 標籤的 usegeneratedkeys 屬性為 true 可以返回插入的記錄的主鍵的id。

<

insert id="user" usegeneratedkeys="true" keyproperty="id">

insert

>

Linux系統中有關機命令有哪些呢

linux系統關機命令有哪些呢?良許教程網為您解答!熟悉linux的朋友應該知道我們在linux系統中常用到的關機命令有 shutdown halt poweroff init 重啟命令有 reboot。下面本文就主要介紹一些常用的關機命令以及各種關機命令之間的區別和具體用法。以下是比較常用的一些關...

SQL語句中有關單引號 雙引號和加號的問題

1 插入 字串資料是用單引號包在外面的,而 號只是用來連線這些字串的 資料庫裡的字段是整型的時候不要加單引號,是字串的時候要加,其它型別根據實際情況來,雙引號就是用來拼接字串的,單引號是sql文的固有寫法,因為你要動態的來拼接,涉及到變數,所以要用 來組合各個字串片段。最終結果無非就是得出能在資料庫...

SQL語句中有關單引號 雙引號和加號的問題

字串是用單引號包起來的,而 號是用來連線這些字串的.在資料庫裡的字段,如果是整型,不需要用單引號,是字串就要加單引號,其它型別根據實際情況來看,而雙引號就是用來拼接字串的,單引號是sql的固有寫法,如果你要動態的來拼接,涉及到變數,所以要用 來組合各個字串片段。最終結果無非就是得出能在資料庫查詢分析...