在使用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
>
<這裡,set 元素會動態前置 set 關鍵字,同時也會消除無關的逗號,因為用了條件語句之後很可能就會在生成的賦值語句的後面留下這些逗號。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
>
<假如說name和gender的值都不為null的話列印的sql為:update user set name='xx' , gender='xx' where id='x'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
>
在紅色標記的地方不存在逗號,而且自動加了乙個set字首和where字尾,上面三個屬性的意義如下,其中prefix意義如上:
suffixoverride:去掉最後乙個逗號(也可以是其他的標記,就像是上面字首中的and一樣)
suffix:字尾
2.where語句使用時遇到的問題(and或者or多餘的情況)
<假如說name和gender的值都不為null的話列印的sql為:select * from user where name = 'xx' and gender = 'xx'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
>
在紅色標記的地方是不存在第乙個and的,上面兩個屬性的意思如下:
prefix:字首
prefixoverride:去掉第乙個and或者是or
也可以使用標籤
<3.標籤的作用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
>
mybatis中sql標籤定義sql片段,include標籤引用,可以復用sql片段。
sql標籤中id屬性對應include標籤中的refid屬性。通過include標籤將sql片段和原sql片段進行拼接成乙個完整的sql語句進行執行。
<引用同乙個xml中的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
>
<引用公用的sql片段include
refid
="sqlid"
/>
<mybatis插入資料的時候返回插入記錄的主鍵id在進行輸入庫插入的時候,如果我們需要使用已經插入的記錄的主鍵,則需要返回剛才插入的資料的主鍵id。include
refid
="namespace.sqlid"
/>
通過設定 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的固有寫法,如果你要動態的來拼接,涉及到變數,所以要用 來組合各個字串片段。最終結果無非就是得出能在資料庫查詢分析...