程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Mybatis入門教程(四)之mybatis靜態sql

Mybatis入門教程(四)之mybatis靜態sql

編輯:關於JAVA

Mybatis入門教程(四)之mybatis靜態sql。本站提示廣大學習愛好者:(Mybatis入門教程(四)之mybatis靜態sql)文章只能為提供參考,不一定能成為您想要的結果。以下是Mybatis入門教程(四)之mybatis靜態sql正文


推舉浏覽:

MyBatis入門進修教程(一)-MyBatis疾速入門

 甚麼是靜態SQL? 靜態SQL有甚麼感化?

  傳統的應用JDBC的辦法,信任年夜家在組合龐雜的的SQL語句的時刻,須要去拼接,略不留意哪怕少了個空格,都邑招致毛病。Mybatis的靜態SQL功效恰是為懂得決這類成績, 其經由過程 if, choose, when, otherwise, trim, where, set, foreach標簽,可組分解異常靈巧的SQL語句,從而進步開辟人員的效力。

上面就去感觸感染Mybatis靜態SQL的魅力吧:

1. if: 你們能斷定,我也能斷定!

作為法式猿,誰不懂 if ! 在mybatis中也能用 if 啦:

<select id="findUserById" resultType="user">
select * from user where 
<if test="id != null">
id=#{id}
</if>
and deleteFlag=0;
</select>

下面例子: 假如傳入的id 不為空, 那末才會SQL才拼接id = #{id}。 這個信任年夜家看一樣就可以明確,不多說。

仔細的人會發明一個成績:“你這纰謬啊! 如果你傳入的id為null, 那末你這終究的SQL語句不就成了 select * from user where and deleteFlag=0, 這語句有成績!”

是啊,這時候候,mybatis的 where 標簽就該盛大退場啦:

2. where, 有了我,SQL語句拼接前提神馬的都是浮雲!

我們經由過程where改革一下下面的例子:

<select id="findUserById" resultType="user">
select * from user where 
<where>
<if test="id != null">
id=#{id}
</if>
and deleteFlag=0;
</where>
</select>

有些人就要問了: “你這都是些甚麼玩藝兒! 跟下面的比擬, 不就是多了個where標簽嘛! 那這個還會不會湧現 select * from user where and deleteFlag=0 ?”

切實其實,從外面下去看,就是多了個where標簽罷了, 不外本質上, mybatis是對它做了處置,當它碰到AND或許OR這些,它曉得怎樣處置。其實我們可以經由過程 trim 標簽去自界說這類處置規矩。

3. trim : 我的地皮,我做主!

下面的where標簽,其適用trim 可以表現以下:

<trim prefix="WHERE" prefixOverrides="AND |OR ">
... 
</trim>

它的意思就是: 當WHERE後緊隨AND或則OR的時刻,就去除AND或許OR。 除WHERE之外, 其實還有一個比擬經典的完成,那就是SET。

4. set: 信我,不失足!

<update id="updateUser" parameterType="com.dy.entity.User">
update user set 
<if test="name != null">
name = #{name},
</if> 
<if test="password != null">
password = #{password},
</if> 
<if test="age != null">
age = #{age}
</if> 
<where>
<if test="id != null">
id = #{id}
</if>
and deleteFlag = 0;
</where>
</update>

成績又來了: “假如我只要name不為null, 那末這SQL不就成了 update set name = #{name}, where ........ ? 你那name前面那逗號會招致失足啊!”

是的,這時候候,便可以用mybatis為我們供給的set 標簽了。上面是經由過程set標簽改革後:

<update id="updateUser" parameterType="com.dy.entity.User">
update user set 
<set>
<if test="name != null">name = #{name},</if> 
<if test="password != null">password = #{password},</if> 
<if test="age != null">age = #{age},</if> 
</set>
<where>
<if test="id != null">
id = #{id}
</if>
and deleteFlag = 0;
</where>
</update>

這個用trim 可表現為:

<trim prefix="SET" suffixOverrides=",">
...
</trim>

WHERE是應用的 prefixOverrides(前綴), SET是應用的 suffixOverrides (後綴), 看明確了吧!

5. foreach: 你有for, 我有foreach, 不要認為就你才屌!

java中有for, 可經由過程for輪回, 異樣, mybatis中有foreach, 可經由過程它完成輪回,輪回的對象固然重要是java容器和數組。

<select id="selectPostIn" resultType="domain.blog.Post">
SELECT *
FROM POST P
WHERE ID in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</select>

將一個 List 實例或許數組作為參數對象傳給 MyBatis,當這麼做的時刻,MyBatis 會主動將它包裝在一個 Map 中並以稱號為鍵。List 實例將會以“list”作為鍵,而數組實例的鍵將是“array”。異樣, 當輪回的對象為map的時刻,index其實就是map的key。

6. choose: 我選擇了你,你選擇了我!

Java中有switch, mybatis有choose。

<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG WHERE state = ‘ACTIVE'
<choose>
<when test="title != null">
AND title like #{title}
</when>
<when test="author != null and author.name != null">
AND author_name like #{author.name}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</select>

以上例子中: 當title和author都不為null的時刻, 那末選擇二選一(前者優先), 假如都為null, 那末就選擇 otherwise中的, 假如tilte和author只要一個不為null, 那末就選擇不為null的誰人。

以上所述是小編給年夜家引見的Mybatis入門教程(四)之mybatis靜態sql,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!

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