亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

MyBatis理解與掌握(動(dòng)態(tài)SQL)

blankyao / 1013人閱讀

摘要:理解與掌握動(dòng)態(tài)框架就是簡(jiǎn)單的條件判斷,利用語句我們可以實(shí)現(xiàn)某些簡(jiǎn)單的條件選擇。有了元素我們就可以動(dòng)態(tài)的更新那些修改了的字段。

MyBatis理解與掌握(動(dòng)態(tài)SQL)

@(MyBatis)[Java, 框架, MyBatis]

if

if 就是__簡(jiǎn)單的條件判斷 __,利用if語句我們可以實(shí)現(xiàn)某些簡(jiǎn)單的條件選擇。
先來看如下一個(gè)例子:

在JDBC中如果要實(shí)現(xiàn)條件查詢,采用的是拼串的方式,而且sql語句往往和java代碼混雜在一起,非常麻煩。

choose(when,otherwise)

choose元素的作用就相當(dāng)于JAVA中的switch語句,基本上跟JSTL中的choose的作用和用法是一樣的,通常都是與when和otherwise搭配的??慈缦乱粋€(gè)例子:

when元素表示當(dāng)when中的 條件滿足的時(shí)候就輸出其中的內(nèi)容 ,只有一個(gè)會(huì)輸出 ,當(dāng)title!=null的時(shí)候就輸出and titlte = #{title},不再往下判斷條件,當(dāng)title為空且content!=null的時(shí)候就輸出and content = #{content},當(dāng)所有條件都不滿足的時(shí)候就輸出otherwise中的內(nèi)容。

where

where語句的作用主要是 簡(jiǎn)化SQL語句中where中的條件判斷 ,先看一個(gè)例子,再解釋一下where的好處。

(1)會(huì)在寫入where元素的地方輸出一個(gè)where
(2)如果所有的條件都不滿足那么MyBatis就會(huì)查出所有的記錄
(3)如果輸出后是and 開頭的,MyBatis會(huì)把第一個(gè)and忽略,當(dāng)然如果是or開頭的,MyBatis也會(huì)把它忽略
(4)在where元素中你不需要考慮空格的問題,MyBatis會(huì)智能的幫你加上

trim

    insert into bbs_brand
    
     name,
     description,
     img_url,
     sort,
     is_display
    
    values
    
     #{name},
     #{description},
     #{imgUrl},
     #{sort},
     #{isDisplay}
    

trim元素的主要功能是可以在自己包含的內(nèi)容前加上某些前綴,也可以在其后加上某些后綴,與之對(duì)應(yīng)的屬性是prefixsuffix.
可以把包含內(nèi)容的首部某些內(nèi)容覆蓋,即忽略,也可以把尾部的某些內(nèi)容覆蓋,對(duì)應(yīng)的屬性是prefixOverridessuffixOverrides

set

set元素主要是用 在更新操作的時(shí)候在包含的語句前輸出一個(gè)set 。
有了set元素我們就可以動(dòng)態(tài)的更新那些修改了的字段。下面是一段示例代碼:


    update user u
        
            
                u.username = #{userName},
            
            
                u.sex = #{sex}
            
        
     
     where id=#{id}

(1)如果包含的語句是以逗號(hào)結(jié)束的話將會(huì)把該逗號(hào)忽略
(2)如果set包含的內(nèi)容為空的話則會(huì)出錯(cuò)

foreach

foreach的主要用在 構(gòu)建in條件中 ,它可以在SQL語句中進(jìn)行迭代一個(gè)集合

foreach元素的屬性主要有:

item表示集合中每一個(gè)元素進(jìn)行迭代時(shí)的別名

index指定一個(gè)名字,用于表示在迭代過程中,每次迭代到的位置

open表示該語句以什么開始

separator表示在每次進(jìn)行迭代之間以什么符號(hào)作為分隔符

close表示以什么結(jié)束

collection屬性,該屬性是必須指定的,但是在不同情況下,該屬性的值是不一樣的,主要有一下3種情況:

(1)果傳入的是單參數(shù)且參數(shù)類型是一個(gè)List的時(shí)候,collection屬性值為list

public List dynamicForeachTest(List ids);

(2)如果傳入的是單參數(shù)且參數(shù)類型是一個(gè)array數(shù)組的時(shí)候,collection的屬性值為array

public List dynamicForeach2Test(int[] ids);  

(3)如果傳入的參數(shù)是多個(gè)的時(shí)候,我們就需要把它們封裝成一個(gè)Map了,所以這個(gè)時(shí)候collection屬性值就是傳入的List或array對(duì)象在自己封裝的map里面的key

public List dynamicForeach3Test(Map params);  

基于3.3.1版本驗(yàn)證的新特性
(4)foreach標(biāo)簽遍歷的集合元素類型是Map.Entry類型時(shí),index屬性指定的變量代表對(duì)應(yīng)的Map.Entry的key,item屬性指定的變量代表對(duì)應(yīng)的Map.Entry的value。此時(shí)如果對(duì)應(yīng)的集合是Map.entrySet,則對(duì)應(yīng)的collection屬性用collection。foreach在進(jìn)行遍歷的時(shí)候如果傳入的參數(shù)是List類型,則其collection屬性的值可以是list或collection,但如果傳入的參數(shù)是Set類型,則collection屬性的值只能用collection。

public List dynamicForeachTest(Set> ids);
bind

bind標(biāo)簽,動(dòng)態(tài)SQL中已經(jīng)包含了這樣一個(gè)新的標(biāo)簽,它的功能是在當(dāng)前OGNL上下文中創(chuàng)建一個(gè)變量并綁定一個(gè)值。
有了它以后我們以前的模糊查詢就可以改成這個(gè)樣子:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/77158.html

相關(guān)文章

  • MyBatis理解掌握(簡(jiǎn)介)

    摘要:語句在代碼中硬編碼,造成代碼不易于維護(hù),實(shí)際應(yīng)用變化的可能較大,變動(dòng)需要改變代碼。對(duì)結(jié)果集解析存在硬編碼查詢列名,變化導(dǎo)致解析代碼變化,系統(tǒng)不易于維護(hù),如果能將數(shù)據(jù)庫(kù)記錄封裝成對(duì)象解析比較方便。 MyBatis理解與掌握(簡(jiǎn)介) @(MyBatis)[Java, 框架, MyBatis] 簡(jiǎn)介 ??Mybatis是一個(gè)數(shù)據(jù)持久層框架,MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手...

    Pocher 評(píng)論0 收藏0
  • MyBatis理解掌握(輸入輸出)

    摘要:輸入?yún)?shù)類型指定輸入?yún)?shù)類型,通過從輸入對(duì)象中獲取參數(shù)值放置在中。查詢結(jié)果處理指定輸出結(jié)果類型,將查詢結(jié)果的一行記錄數(shù)據(jù)映射為指定類型的對(duì)象。 MyBatis理解與掌握(輸入與輸出) @(MyBatis)[Java, 框架, MyBatis] 占位符和拼接 {}:占位符 能防止sql注入問題,所一能盡量用#{}就盡量用#{}用來傳入?yún)?shù),sql在解析的時(shí)候會(huì)加上 當(dāng)成字符串來解析 ,...

    why_rookie 評(píng)論0 收藏0
  • MyBatis理解掌握(緩存)

    摘要:理解與掌握緩存框架一級(jí)緩存默認(rèn)就可以使用框架處理緩存是依賴映射,的內(nèi)部緩存使用一個(gè),為語句。一級(jí)緩存的作用域是一個(gè),一旦發(fā)生變化,一級(jí)緩存失敗在同一個(gè)中,執(zhí)行相同的查詢,第一次會(huì)去查詢數(shù)據(jù)庫(kù),并寫到緩存中第二次直接從緩存中取。 MyBatis理解與掌握(緩存) @(MyBatis)[Java, 框架, MyBatis] 一級(jí)緩存(SqlSession) 默認(rèn)就可以使用 框架處理緩存是 ...

    馬龍駒 評(píng)論0 收藏0
  • Mybatis源碼分析

    摘要:我認(rèn)為學(xué)習(xí)框架源碼分為兩步抓住主線,掌握框架的原理和流程理解了處理思路之后,再去理解面向?qū)ο笏枷牒驮O(shè)計(jì)模式的用法目前第一步尚有問題,需要多走幾遍源碼,加深下理解,一起加油 這篇文章我們來深入閱讀下Mybatis的源碼,希望以后可以對(duì)底層框架不那么畏懼,學(xué)習(xí)框架設(shè)計(jì)中好的思想; 架構(gòu)原理 架構(gòu)圖 showImg(https://segmentfault.com/img/remote/...

    lindroid 評(píng)論0 收藏0
  • MyBatis理解掌握(原理分析)

    摘要:理解與掌握原理分析框架功能架構(gòu)接口層提供給外部使用的接口,開發(fā)人員通過這些本地來操作數(shù)據(jù)庫(kù)。流程分析數(shù)據(jù)處理過程根據(jù)的查找相應(yīng)的對(duì)象。預(yù)處理對(duì)象,得到對(duì)象。傳入和結(jié)果處理對(duì)象,通過的方法來執(zhí)行,并對(duì)執(zhí)行結(jié)果進(jìn)行處理。 MyBatis理解與掌握(原理分析) @(MyBatis)[Java, 框架, MyBatis] 功能架構(gòu) showImg(https://segmentfault.co...

    keelii 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<