Mybatis4 之Mybatis動態(tài)sql的實現(xiàn)代碼
2020-03-22 20:48 作者:艾銻無限 瀏覽量:
中小企業(yè)為什么要選擇IT外包呢?
中小企業(yè)選擇IT外包服務(wù)的原因,首先大家想到的可能是節(jié)省成本,但從專業(yè)的角度上來說,節(jié)省成本卻不是最重要的,這時代任何一家企業(yè)都會成為IT公司,任何一家企業(yè)都會成互聯(lián)網(wǎng)公司,任何一家企業(yè)最終也都會成為數(shù)據(jù)公司,所以中小企業(yè)在發(fā)展中,IT的規(guī)劃和運用是最重要的,這直接決定著這家企業(yè)能活多久,能活多好.
但往往中小企業(yè)負(fù)責(zé)人為了方便,會直接花錢找個網(wǎng)絡(luò)管理員,讓這個人即處理企業(yè)內(nèi)部電腦和網(wǎng)絡(luò)的問題,又兼著其它方面的工作,從表面上看好像還挺劃算,而且人是自己公司的人,好像也挺放心.
但實際恰恰相反,我給大家講個故事,可能你就明白了.
有一家手機(jī)企業(yè),他們的核心優(yōu)勢是研發(fā)和生產(chǎn),營銷和廣告并不是他們具備的能力,為了更好的銷售他們生產(chǎn)的手機(jī),他們就請來了一個專門搞營銷和廣告的經(jīng)理,因為公司處在發(fā)展時期,為了節(jié)省成本,所以這個經(jīng)理就自己一個兵,在沒有團(tuán)隊的情況下,又要想策劃,又要搞制作,還要設(shè)計圖片,最終策劃出來的方案是二流的,制作和設(shè)計還是三流的,導(dǎo)致手機(jī)銷售量非常差,沒有正常現(xiàn)金流,后來這家企業(yè)就倒閉關(guān)門了.
還有一家手機(jī)企業(yè),他們的核心優(yōu)勢也是研發(fā)和生產(chǎn),但他們的負(fù)責(zé)人非常智慧,把營銷和廣告部分外包給了一家行業(yè)頂尖的企業(yè),這家企業(yè)幫助他們策劃出了一個絕佳的方案,還幫助落實和執(zhí)行了整個方案,最終大獲全勝,當(dāng)年手機(jī)銷量邁進(jìn)了全國前三,后來核算整體在營銷和廣告的投入和產(chǎn)出卻是極低的.
上面兩個案例,讓我們看到了企業(yè)致勝的關(guān)鍵不是你有什么,而是你如何利用你的沒有.
總的來說中小企業(yè)選擇IT外包公司有三大優(yōu)勢:
l 首先節(jié)省成本是第一點優(yōu)勢
我們透過下圖可以看出企業(yè)自招網(wǎng)管和用IT外包公司成本可以節(jié)省90%以上,而且還是專業(yè)的團(tuán)隊提供服務(wù).
l 其次專業(yè)化的服務(wù)讓企業(yè)有更多的時間搶占先機(jī)是第二大優(yōu)勢
專業(yè)的團(tuán)隊,可以根據(jù)你不同的需要匹配不同的工程師,這大大節(jié)省了企業(yè)的時間,互聯(lián)網(wǎng)時代,分秒必爭,當(dāng)年滴滴和快滴的100億戰(zhàn)爭,不就是為了贏得時間,讓自己更快的戰(zhàn)領(lǐng)這個市場,失去先機(jī)就失去了一切,所以IT外包公司給你帶來的不僅僅是專業(yè),還有先機(jī).
l 最后獲得專業(yè)的解決方案成為行業(yè)的領(lǐng)導(dǎo)地位是第三大優(yōu)勢
這個時代已經(jīng)不是人海戰(zhàn)術(shù),而是運用互聯(lián)網(wǎng)技術(shù),以一當(dāng)十,以十當(dāng)百的快速發(fā)展,那怎樣可以迅速從行業(yè)中脫穎而出,就需要互聯(lián)網(wǎng)的解決方案,一家專業(yè)的互聯(lián)網(wǎng)IT外包公司可以讓你快速轉(zhuǎn)型升級,最重要的不僅僅只有方案,還有切實可行的落地執(zhí)行,讓你更專注自己核心業(yè)務(wù),達(dá)到強(qiáng)強(qiáng)聯(lián)合的效果.
你的
企業(yè)IT外包了嗎?
Mybatis4 之Mybatis動態(tài)sql的實現(xiàn)代碼
1.什么是動態(tài)SQL
傳統(tǒng)的使用JDBC的方法,相信大家在組合復(fù)雜的的SQL語句的時候,需要去拼接,稍不注意哪怕少了個空格,都會導(dǎo)致錯誤。Mybatis的動態(tài)SQL功能正是為了解決這種問題, 其通過 if, choose, when, otherwise, trim, where, set, foreach標(biāo)簽,可組合成非常靈活的SQL語句,從而提高開發(fā)人員的效率。
SQL語句不固定, 會根據(jù)前臺用戶的操作而進(jìn)行變化的SQL語句, 可以被稱之為動態(tài)SQL. 在MyBatis中, 提供了一組標(biāo)簽, 用于方便的實現(xiàn)動態(tài)SQL, 不需要通過java代碼拼接字符串了.
###2.動態(tài)sql中的標(biāo)簽
1. <if>
用于條件判斷, test屬性表示判斷結(jié)果, 要求是一個boolean.
2.<where>
用于維護(hù)where子句, 通常配合一起使用. 如下功能:
a)當(dāng)沒有條件時, 不會創(chuàng)建WHERE關(guān)鍵字;
b)當(dāng)有條件時, 會自動生成WHERE關(guān)鍵字;
c)會自動去掉第一個條件的and/or關(guān)鍵字.
3.<choose><when><otherwise>
功能類似于switch…case…default, 表示多分支判斷, 只能成立一個條件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<mapper namespace= "com.bjsxt.mapper.UserMapper" >
<select id= "selByCondition" resultType= "user" >
select * from tb_user
<where>
< if test= "id != null" >
and id=#{id}
</ if >
< if test= "username != null and username != ''" >
and username=#{username}
</ if >
< if test= "age != null" >
and age <> #{age}
</ if >
<choose>
<when test= "birthday != null and birthday != ''" >
and birthday = #{birthday}
</when>
<otherwise>
and birthday is null
</otherwise>
</choose>
</where>
</select>
</mapper> |
4.<bind>
對參數(shù)進(jìn)行加工, 通常用于模糊查詢給參數(shù)加通配符
1
2
3
4
5
6
7
8
9
|
<select id= "sel2" resultType= "user" >
<include refid= "base_sql" />
<where>
< if test= "realname != null and realname != ''" >
<bind name= "realname" value= "'%' + realname + '%'" />
and realname like #{realname}
</ if >
</where>
</select> |
5.<include>
配合使用, 用于提取通用sql語句片段, 用于引用SQL片段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<sql id= "base_sql" >
select
id, username, password, realname, age, birthday, reg_time regTime
from tb_user
</sql>
<select id= "sel2" resultType= "user" >
<include refid= "base_sql" />
<where>
< if test= "realname != null and realname != ''" >
<bind name= "realname" value= "'%' + realname + '%'" />
and realname like #{realname}
</ if >
</where>
</select> |
6.<set>
用于維護(hù)update語句中的set子句, 特點是可以刪除多余的逗號
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<update id= "upd" >
update
tb_user
<set>
< if test= "username != null and username != ''" >
username=#{username},
</ if >
< if test= "age != null" >
age=#{age}
</ if >
</set>
where
id=#{id}
</update> |
7.<foreach>
遍歷集合(數(shù)組, List, Set, Map), 通常用于in操作或批量新增. 屬性簡介:
a)collection: 要遍歷的集合
b)item: 迭代項
c)open: 以什么字符開頭
d)close: 以什么字符結(jié)束
e)separator: 多個迭代項之間的分隔符
1
2
3
4
5
6
7
8
9
|
< delete id= "delBatch" >
delete from tb_user
< where >
id in
<foreach collection= "ids" item= "id" open = "(" close = ")" separator= "," >
#{id}
</foreach>
</ where >
</ delete > |
8.<trim>
在語句的前后進(jìn)行追加和去除指定的字符.
1
2
3
4
5
6
7
8
|
< insert id= "insBatch" >
insert into tb_user values
<foreach collection= "users" item= "user" separator= "," >
<trim prefix= "(" prefixOverrides= "," suffix= ")" suffixOverrides= "," >
, default , #{ user .username}, #{ user . password }, #{ user .realname}, #{ user .age}, #{ user .birthday}, now(),
</trim>
</foreach>
</ insert > |
知識點補(bǔ)充:靜態(tài)sql與動態(tài)sql有什么區(qū)別
SQL 語句從編譯和運行的角度可以分為兩種,靜態(tài) SQL和 動態(tài) SQL,這兩種 SQL 在使用方式、運行機(jī)制和性能表現(xiàn)等方面各有特點 :
靜態(tài) SQL:靜態(tài) SQL 語句一般用于嵌入式 SQL 應(yīng)用中,在程序運行前,SQL 語句必須是確定的,例如 SQL 語句中涉及的列名和表名必須是存在的。靜態(tài) SQL 語句的編譯是在應(yīng)用程序運行前進(jìn)行的,編譯的結(jié)果會存儲在數(shù)據(jù)庫內(nèi)部。而后程序運行時,數(shù)據(jù)庫將直接執(zhí)行編譯好的 SQL 語句,降低運行時的開銷。
動態(tài) SQL:動態(tài) SQL 語句是在應(yīng)用程序運行時被編譯和執(zhí)行的,例如,使用 DB2 的交互式工具 CLP 訪問數(shù)據(jù)庫時,用戶輸入的 SQL 語句是不確定的,因此 SQL 語句只能被動態(tài)地編譯。動態(tài) SQL 的應(yīng)用較多,常見的 CLI 和 JDBC 應(yīng)用程序都使用動態(tài) SQL。
靜態(tài)sql:語句類型在編程時候必須是確定好的。比如
1
2
|
select * from employee where empno= 'abc'
select * from employee where empno= '12' |
都必須是確定的,唯一可以變化的是abc的值。
動態(tài)sql:語句類型可以在運行期間指定,比如clp就是最典型的動態(tài)sql程序,你可以輸入任何命令。
靜態(tài)sql的存取路徑是在運行前就確定好的,而動態(tài)sql的存取路徑是在運行時動態(tài)生成的。因此生成的存取計劃相對更優(yōu),但考慮到生成存取路徑的開銷,有可能應(yīng)用程序的運行時間相對會比靜態(tài)sql長些。
總結(jié)
到此這篇關(guān)于Mybatis4 之Mybatis動態(tài)sql的實現(xiàn)代碼的文章就介紹到這了,更多相關(guān)mybatis動態(tài)sql內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章: