程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> MyBatis應用靜態SQL標簽的小圈套

MyBatis應用靜態SQL標簽的小圈套

編輯:關於JAVA

MyBatis應用靜態SQL標簽的小圈套。本站提示廣大學習愛好者:(MyBatis應用靜態SQL標簽的小圈套)文章只能為提供參考,不一定能成為您想要的結果。以下是MyBatis應用靜態SQL標簽的小圈套正文


 MyBatis是一個支撐通俗SQL查詢,存儲進程和高等映照的優良耐久層框架。MyBatis清除了簡直一切的JDBC代碼和參數的手工設置和對成果集的檢索封裝。MyBatis可使用簡略的XML或注解用於設置裝備擺設和原始映照,將接口和Java的POJO(Plain Old Java Objects,通俗的Java對象)映照成數據庫中的記載。

如今MyBatis愈來愈受年夜家的愛好了,它的優勢年夜家都曉得,我就不多說了,直接說重點。

  MyBatis中供給靜態SQL功效,我們可使用<if><when><where><otherwise><foreach>等等,如許我們便可以寫出依據前提生成的靜態SQL了,然則,在這中央,我們常常用到的<if>標簽有一個小誤區,一不當心就會失落下去,上面先舉個正常的例子:

<select id="findActiveBlogWithTitleLike" 
parameterType="Blog" resultType="Blog">
SELECT * FROM BLOG 
WHERE state = ‘ACTIVE' 
<if test="title != null">
AND title like #{title}
</if>
</select>

  在下面的例子中,當title不等於null時,<if>標簽中央的前提才會被拼接上,如許,SQL語句就是靜態的了。

  然則,當我們對一切前提停止斷定時,你能否會如許寫:

<select id="findActiveBlogWithTitleLike" 
parameterType="Blog" resultType="Blog">
SELECT * FROM BLOG 
WHERE
<if test="userId != null">
state = ‘ACTIVE' 
</if>
<if test="title != null">
AND title like #{title}
</if>
</select>

  沒成績吧?至多語法上不錯的,至多它可以正常生成一個SQL。

  然則,不曉得你留意到了沒,當一切前提都為null的時刻,會湧現甚麼情形?

SELECT * FROM BLOG 
WHERE

  看到了吧?如許的SQL能勝利履行麼?

  謎底固然是NO。

  那末該怎樣辦?那就要記住了,當你寫靜態SQL時刻,先斟酌一下會不會發生一切前提都不成立的情形,會不會湧現只要一個WHERE而沒有前提的情形,那末你要做的就是加一個<where>標簽將一切前提包起來。

<select id="findActiveBlogWithTitleLike" 
parameterType="Blog" resultType="Blog">
SELECT * FROM BLOG 
<where>
<if test="userId != null">
state = ‘ACTIVE' 
</if>
<if test="title != null">
AND title like #{title}
</if>
</where>
</select>

  如許,當一切前提都不成立時,WHERE也不會被拼上。

  這時候,無機靈的小同伴發明了,假如第一個前提不成立,第二個成立,那SQL會不會釀成如許?

SELECT * FROM BLOG 
WHERE
AND title like #{title}

  這個就寧神好了,當你用<if>標簽包抄前提後,它會主動去失落AND的。

以上所述是小編給年夜家引見的MyBatis應用靜態SQL標簽的小圈套,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved