最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

MyBatis框架詳解—動態(tài)SQL

2021-03-23 11:25 作者:動力節(jié)點(diǎn)小王本王  | 我要投稿



本篇文章主要內(nèi)容

動態(tài)SQL-if

動態(tài)SQL-where

動態(tài)SQL-foreach

動態(tài)SQL-片段

動態(tài) SQL,通過 MyBatis?提供的各種標(biāo)簽對條件作出判斷以實(shí)現(xiàn)動態(tài)拼接SQL?語句。這里的條件判斷使用的表達(dá)式為OGNL?表達(dá)式。

常用的動態(tài) SQL 標(biāo)簽有<if>、<where>、<choose/>、<foreach>等。

MyBatis?的動態(tài) SQL?語句,與JSTL?中的語句非常相似。

動態(tài) SQL,主要用于解決查詢條件不確定的情況:在程序運(yùn)行期間,根據(jù)用戶提交的查詢條件進(jìn)行查詢。提交的查詢條件不同,執(zhí)行的 SQL 語句不同。若將每種可能的情況均逐一列出,對所有條件進(jìn)行排列組合,將會出現(xiàn)大量的SQL 語句。此時,可使用動態(tài) SQL 來解決這樣的問題

環(huán)境準(zhǔn)備

創(chuàng)建新的maven 項(xiàng)目,加入mybatis , mysql 驅(qū)動依賴

創(chuàng)建實(shí)體類Student , StudentDao 接口,StudentDao.xml ,mybatis.xml , ?測試類使用之前的表student。

在mapper?的動態(tài) SQL?中若出現(xiàn)大于號(>)、小于號(<)、大于等于號(>=),小于等于號(<=)等符號,最好將其轉(zhuǎn)換為實(shí)體符號。否則, XML?可能會出現(xiàn)解析出錯問題。

特別是對于小于號(<),在XML?中是絕不能出現(xiàn)的。否則解析mapper 文件會出錯。

實(shí)體符號表:

?動態(tài) SQL?之<if>

動態(tài) SQL?之<if>

對于該標(biāo)簽的執(zhí)行,當(dāng)test 的值為true 時,會將其包含的 SQL 片斷拼接到其所在的 SQL 語句中。

語法:

<if?test=”條件”> sql?語句的部分?</if>

接口方法:

List<Student> selectStudentIf(Student student);

mapper 文件:

測試方法:

動態(tài) SQL?之<where>

<if/>標(biāo)簽的中存在一個比較麻煩的地方:需要在where 后手工添加 1=1 的子句。因?yàn)?,若where 后的所有<if/>條件均為false,而where 后若又沒有 1=1 子句,則 SQL 中就會只剩下一個空的 where,SQL 出錯。所以,在where 后,需要添加永為真子句 1=1,以防止這種情況的發(fā)生。但當(dāng)數(shù)據(jù)量很大時,會嚴(yán)重影響查詢效率。

使用<where/>標(biāo)簽,在有查詢條件時,可以自動添加上where?子句;沒有查詢條件時,不會添加where?子句。需要注意的是,第一個<if/>標(biāo)簽中的SQL?片斷,可以不包含and。不過,寫上and?也不錯,系統(tǒng)會將多出的and 去掉。但其它<if/>中 SQL?片斷的and,必須要求寫上。否則 SQL?語句將拼接出錯

語法:

<where> 其他動態(tài)sql </where>

接口方法:

List<Student> selectStudentWhere(Student student);

mapper 文件:

測試方法:

動態(tài) SQL?之<foreach>

<foreach/>標(biāo)簽用于實(shí)現(xiàn)對于數(shù)組與集合的遍歷。對其使用,需要注意:

  • collection?表示要遍歷的集合類型, list?,array?等。

  • open、close、separator?為對遍歷內(nèi)容的 SQL?拼接。

語法:

(1)?遍歷 List<簡單類型>

表達(dá)式中的List 使用list 表示,其大小使用 list.size 表示。

需求:查詢學(xué)生 id 是 1002,1005,1006?

接口方法:

List<Student> selectStudentForList(List<Integer> idList);

mapper 文件:

測試方法:

(2)?遍歷 List<對象類型>

接口方法:

List<Student> selectStudentForList2(List<Student> stuList);

mapper 文件:

測試方法:

動態(tài) SQL?之代碼片段

<sql/>標(biāo)簽用于定義 SQL?片斷,以便其它 SQL?標(biāo)簽復(fù)用。而其它標(biāo)簽使用該 SQL?片斷,需要使用<include/>子標(biāo)簽。該<sql/>標(biāo)簽可以定義 SQL?語句中的任何部分,所以<include/>子標(biāo)簽可以放在動態(tài) SQL?的任何位置。

接口方法:

List<Student> selectStudentSqlFragment(List<Student> stuList);

mapper 文件:

測試方法:

最后奉上視頻教程??,視頻觀看效果更佳??!走過路過別忘素質(zhì)三連哦~~



MyBatis框架詳解—動態(tài)SQL的評論 (共 條)

分享到微博請遵守國家法律
贺兰县| 新乡县| 奉节县| 鲁山县| 连南| 黔南| 灯塔市| 清流县| 中牟县| 巫溪县| 沙洋县| 新田县| 新兴县| 临武县| 宜都市| 兖州市| 竹溪县| 额敏县| 阿勒泰市| 板桥市| 祁阳县| 邹平县| 忻州市| 商河县| 砀山县| 连山| 东阳市| 漳浦县| 互助| 镇远县| 肥城市| 丹巴县| 禄丰县| 汉沽区| 海兴县| 天津市| 关岭| 虹口区| 丹寨县| 佛冈县| 江北区|