摘要:理解與掌握動態(tài)框架就是簡單的條件判斷,利用語句我們可以實現(xiàn)某些簡單的條件選擇。有了元素我們就可以動態(tài)的更新那些修改了的字段。
MyBatis理解與掌握(動態(tài)SQL)
@(MyBatis)[Java, 框架, MyBatis]
ifif 就是__簡單的條件判斷 __,利用if語句我們可以實現(xiàn)某些簡單的條件選擇。
先來看如下一個例子:
在JDBC中如果要實現(xiàn)條件查詢,采用的是拼串的方式,而且sql語句往往和java代碼混雜在一起,非常麻煩。
choose(when,otherwise)choose元素的作用就相當(dāng)于JAVA中的switch語句,基本上跟JSTL中的choose的作用和用法是一樣的,通常都是與when和otherwise搭配的??慈缦乱粋€例子:
when元素表示當(dāng)when中的 條件滿足的時候就輸出其中的內(nèi)容 ,只有一個會輸出 ,當(dāng)title!=null的時候就輸出and titlte = #{title},不再往下判斷條件,當(dāng)title為空且content!=null的時候就輸出and content = #{content},當(dāng)所有條件都不滿足的時候就輸出otherwise中的內(nèi)容。
wherewhere語句的作用主要是 簡化SQL語句中where中的條件判斷 ,先看一個例子,再解釋一下where的好處。
(1)會在寫入where元素的地方輸出一個where
(2)如果所有的條件都不滿足那么MyBatis就會查出所有的記錄
(3)如果輸出后是and 開頭的,MyBatis會把第一個and忽略,當(dāng)然如果是or開頭的,MyBatis也會把它忽略
(4)在where元素中你不需要考慮空格的問題,MyBatis會智能的幫你加上
insert into bbs_brand name, description, img_url, sort, is_display values#{name}, #{description}, #{imgUrl}, #{sort}, #{isDisplay}
trim元素的主要功能是可以在自己包含的內(nèi)容前加上某些前綴,也可以在其后加上某些后綴,與之對應(yīng)的屬性是prefix和suffix.
可以把包含內(nèi)容的首部某些內(nèi)容覆蓋,即忽略,也可以把尾部的某些內(nèi)容覆蓋,對應(yīng)的屬性是prefixOverrides和suffixOverrides;
set元素主要是用 在更新操作的時候在包含的語句前輸出一個set 。
有了set元素我們就可以動態(tài)的更新那些修改了的字段。下面是一段示例代碼:
update user u where id=#{id} u.username = #{userName}, u.sex = #{sex}
(1)如果包含的語句是以逗號結(jié)束的話將會把該逗號忽略
(2)如果set包含的內(nèi)容為空的話則會出錯
foreach的主要用在 構(gòu)建in條件中 ,它可以在SQL語句中進行迭代一個集合 。
foreach元素的屬性主要有:
item表示集合中每一個元素進行迭代時的別名
index指定一個名字,用于表示在迭代過程中,每次迭代到的位置
open表示該語句以什么開始
separator表示在每次進行迭代之間以什么符號作為分隔符
close表示以什么結(jié)束
collection屬性,該屬性是必須指定的,但是在不同情況下,該屬性的值是不一樣的,主要有一下3種情況:
(1)果傳入的是單參數(shù)且參數(shù)類型是一個List的時候,collection屬性值為list
public ListdynamicForeachTest(List ids);
(2)如果傳入的是單參數(shù)且參數(shù)類型是一個array數(shù)組的時候,collection的屬性值為array
public ListdynamicForeach2Test(int[] ids);
(3)如果傳入的參數(shù)是多個的時候,我們就需要把它們封裝成一個Map了,所以這個時候collection屬性值就是傳入的List或array對象在自己封裝的map里面的key
public ListdynamicForeach3Test(Map params);
基于3.3.1版本驗證的新特性
(4)foreach標(biāo)簽遍歷的集合元素類型是Map.Entry類型時,index屬性指定的變量代表對應(yīng)的Map.Entry的key,item屬性指定的變量代表對應(yīng)的Map.Entry的value。此時如果對應(yīng)的集合是Map.entrySet,則對應(yīng)的collection屬性用collection。foreach在進行遍歷的時候如果傳入的參數(shù)是List類型,則其collection屬性的值可以是list或collection,但如果傳入的參數(shù)是Set類型,則collection屬性的值只能用collection。
public ListbinddynamicForeachTest(Set > ids);
bind標(biāo)簽,動態(tài)SQL中已經(jīng)包含了這樣一個新的標(biāo)簽,它的功能是在當(dāng)前OGNL上下文中創(chuàng)建一個變量并綁定一個值。
有了它以后我們以前的模糊查詢就可以改成這個樣子:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/77158.html
摘要:語句在代碼中硬編碼,造成代碼不易于維護,實際應(yīng)用變化的可能較大,變動需要改變代碼。對結(jié)果集解析存在硬編碼查詢列名,變化導(dǎo)致解析代碼變化,系統(tǒng)不易于維護,如果能將數(shù)據(jù)庫記錄封裝成對象解析比較方便。 MyBatis理解與掌握(簡介) @(MyBatis)[Java, 框架, MyBatis] 簡介 ??Mybatis是一個數(shù)據(jù)持久層框架,MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手...
摘要:輸入?yún)?shù)類型指定輸入?yún)?shù)類型,通過從輸入對象中獲取參數(shù)值放置在中。查詢結(jié)果處理指定輸出結(jié)果類型,將查詢結(jié)果的一行記錄數(shù)據(jù)映射為指定類型的對象。 MyBatis理解與掌握(輸入與輸出) @(MyBatis)[Java, 框架, MyBatis] 占位符和拼接 {}:占位符 能防止sql注入問題,所一能盡量用#{}就盡量用#{}用來傳入?yún)?shù),sql在解析的時候會加上 當(dāng)成字符串來解析 ,...
摘要:理解與掌握緩存框架一級緩存默認就可以使用框架處理緩存是依賴映射,的內(nèi)部緩存使用一個,為語句。一級緩存的作用域是一個,一旦發(fā)生變化,一級緩存失敗在同一個中,執(zhí)行相同的查詢,第一次會去查詢數(shù)據(jù)庫,并寫到緩存中第二次直接從緩存中取。 MyBatis理解與掌握(緩存) @(MyBatis)[Java, 框架, MyBatis] 一級緩存(SqlSession) 默認就可以使用 框架處理緩存是 ...
摘要:我認為學(xué)習(xí)框架源碼分為兩步抓住主線,掌握框架的原理和流程理解了處理思路之后,再去理解面向?qū)ο笏枷牒驮O(shè)計模式的用法目前第一步尚有問題,需要多走幾遍源碼,加深下理解,一起加油 這篇文章我們來深入閱讀下Mybatis的源碼,希望以后可以對底層框架不那么畏懼,學(xué)習(xí)框架設(shè)計中好的思想; 架構(gòu)原理 架構(gòu)圖 showImg(https://segmentfault.com/img/remote/...
摘要:理解與掌握原理分析框架功能架構(gòu)接口層提供給外部使用的接口,開發(fā)人員通過這些本地來操作數(shù)據(jù)庫。流程分析數(shù)據(jù)處理過程根據(jù)的查找相應(yīng)的對象。預(yù)處理對象,得到對象。傳入和結(jié)果處理對象,通過的方法來執(zhí)行,并對執(zhí)行結(jié)果進行處理。 MyBatis理解與掌握(原理分析) @(MyBatis)[Java, 框架, MyBatis] 功能架構(gòu) showImg(https://segmentfault.co...
閱讀 3560·2021-09-06 15:13
閱讀 1543·2021-09-02 10:19
閱讀 2491·2019-08-30 15:52
閱讀 932·2019-08-29 15:25
閱讀 1580·2019-08-26 18:36
閱讀 511·2019-08-26 13:23
閱讀 1349·2019-08-26 10:46
閱讀 3515·2019-08-26 10:41