【框架】116:mybatis配置文件標(biāo)簽詳解

?今天是劉小愛(ài)自學(xué)Java的116天。

感謝你的觀看,謝謝你。

image

今日學(xué)習(xí)的內(nèi)容說(shuō)明:

  • 核心配置文件中,各種標(biāo)簽的作用詳解。
  • 映射文件中的各種標(biāo)簽。
  • 映射文件中$和#的區(qū)別以及特殊用法。
  • 最后介紹一款mybatis插件

一、核心配置文件標(biāo)簽

即這兩天配置的mybatis-config.xml文件。

在其文件中有許多個(gè)標(biāo)簽,都有其特殊作用,并且也可以自己添加一些標(biāo)簽:

1environments標(biāo)簽

image

①environments

這個(gè)很好理解,根據(jù)語(yǔ)義也就是配置環(huán)境,使用default屬性指定生效的環(huán)境

其中每個(gè)環(huán)境都有一個(gè)對(duì)應(yīng)的id,比如:

  • ②中的環(huán)境id為development,也就是開(kāi)發(fā)環(huán)境。

  • ⑤中的環(huán)境id為test,也就是測(cè)試環(huán)境。

③transactionManager

事務(wù)管理器,我們昨天執(zhí)行增刪改操作時(shí),后面需要提交事務(wù),這個(gè)也就是和其相對(duì)應(yīng)。

④dataSource

數(shù)據(jù)源,type表示數(shù)據(jù)源的類型,此處是數(shù)據(jù)源連接池類型的。

其中這塊的內(nèi)容,我們可以封裝到一個(gè)配置文件中:jdbc.properties

image

使用properties標(biāo)簽引入jdbc配置文件。

在核心配置文件中,使用${}取出對(duì)應(yīng)的值,其中要和jdbc配置文件中的屬性對(duì)應(yīng)。

2settings標(biāo)簽

settings,設(shè)置的意思,它就好比是一個(gè)開(kāi)啟某某功能的開(kāi)關(guān)。

其中有多種屬性對(duì)應(yīng)有多種功能,今天只接觸一個(gè)功能:駝峰匹配

image

這也就是我昨天還強(qiáng)調(diào)過(guò)的問(wèn)題。

我覺(jué)得我自己好傻,還在筆記中補(bǔ)充說(shuō)明:可以使用起別名的方式解決這個(gè)問(wèn)題。

結(jié)果到了今天,又發(fā)現(xiàn)竟然可以直接有個(gè)settings標(biāo)簽,可以直接開(kāi)啟自動(dòng)駝峰匹配。

值得注意的是:

settings標(biāo)簽不能放在properties標(biāo)簽前面,不然會(huì)報(bào)錯(cuò),至于原因是啥我還不清楚。

3typeAliases標(biāo)簽

之前我們?cè)谟成湮募杏玫絡(luò)ava類型時(shí),都是使用類的全限定名,書(shū)寫(xiě)起來(lái)非常麻煩。

就可以使用該標(biāo)簽解決這個(gè)問(wèn)題:

image

①單一類型取別名

alisa:也就是別名的意思,這里的liuxiaoai就代表了前面type屬性中的全限定名。

所以在映射文件中使用該別名也就相當(dāng)于type中的全限定名。

②開(kāi)啟別名包掃描

這個(gè)也就相當(dāng)于自動(dòng)開(kāi)啟了一個(gè)包名。

我們?cè)趓esultType中寫(xiě)入U(xiǎn)ser,也就相當(dāng)于自動(dòng)給User加了一個(gè)包,也就是全限定名了。

4mappers標(biāo)簽

image

每個(gè)映射文件都要在核心配置文件中引入,要一一對(duì)應(yīng),一共有四種引入方式:

上述是通過(guò)resource引入,其它都不實(shí)用。

比如說(shuō)通過(guò)class引入時(shí),需要將映射文件和mapper接口放在同一個(gè)目錄下。

準(zhǔn)確說(shuō)這四種都不實(shí)用,但是因?yàn)檫€沒(méi)有學(xué)到spring框架,暫且使用resource引入。

二、映射文件標(biāo)簽

1增刪改查

image

根據(jù)語(yǔ)義也就能理解是增刪改查,id的話也就是和mapper接口的方法名保持一致。

parameterType:參數(shù)類型。

即從數(shù)據(jù)庫(kù)中查詢到的返回值類型。

2${}的用法

${}非預(yù)編譯,直接的sql拼接,不能防止sql注入,所以一般都會(huì)使用它。

那么問(wèn)題來(lái)了,${}有什么用呢?。

比如說(shuō):數(shù)據(jù)庫(kù)有兩個(gè)一模一樣的表,歷史表,當(dāng)前表,查詢表中的信息時(shí):

  • 有時(shí)候要從歷史表中去查詢數(shù)據(jù)。
  • 有時(shí)候需要去新的表去查詢數(shù)據(jù)。
  • 希望使用1個(gè)方法來(lái)完成操作。

這個(gè)時(shí)候就可以根據(jù)表名來(lái)查詢信息:

image

如果參數(shù)是表名,那么用#號(hào)是不行的,因?yàn)樗穷A(yù)編譯。

就是我們?nèi)?shù)據(jù)庫(kù)查詢數(shù)據(jù),from+表名是第一個(gè)步驟,需要一開(kāi)始就知道,這個(gè)我們以前也說(shuō)明過(guò)。

如果是預(yù)編譯,它是不行的,所以這個(gè)時(shí)候就需要使用到$了,它是直接拼接sql語(yǔ)句。

其中在mapper層接口中的參數(shù)名前需要加一個(gè)注解@Param()做出說(shuō)明。

獲取參數(shù)時(shí),使用注解中的說(shuō)明即可。

3#{}的用法

{}預(yù)編譯,能防止sql注入。

image

如果涉及到多個(gè)參數(shù)的傳遞時(shí),需要使用到#,使用$不行。

同樣的方法:使用@Param注解指定參數(shù)名,這是最簡(jiǎn)單也最常用的用法。

就是如果是單個(gè)參數(shù),可以不寫(xiě)注解,但是寫(xiě)了也沒(méi)問(wèn)題,既然如此,干脆都寫(xiě)。

這是一種習(xí)慣,并且可讀性也很強(qiáng)。

4傳參的類型

parameterType有三種類型的輸入?yún)?shù):基本數(shù)據(jù)類型,hashMap,pojo包裝類。

  • 比如增加操作的時(shí)候傳的就是User,User就是包裝類。
  • 比如查詢操作根據(jù)id查詢,傳的參數(shù)就是基本數(shù)據(jù)類型。

那hashMap是怎么回事呢?

image

根據(jù)map查詢數(shù)據(jù),其中map中的key要和sql語(yǔ)句中的參數(shù)相對(duì)呀。

起什么名無(wú)所謂,但要一致,不過(guò)這種傳參方法不常見(jiàn),了解即可。

三、介紹一個(gè)mybatis插件

該插件對(duì)于新手來(lái)說(shuō)會(huì)有點(diǎn)用處,對(duì)于老程序員來(lái)說(shuō)感覺(jué)用處不大。

1下載插件

idea中選擇File-settings:

image

找到plugins,其本身也就是插件的意思,搜索MybatisX:

  • 如果搜索不到,需要先下載。
  • 如果不想使用這個(gè)插件了,也可以在搜索框中將插件取消。

2插件效果

重啟idea,就會(huì)看到多出了一些小鳥(niǎo):

image

其效果就是將mapper層接口中的方法,和對(duì)應(yīng)映射文件中的sql語(yǔ)句關(guān)聯(lián)起來(lái)了。

就這么一個(gè)效果,也不清楚有啥其它作用。

最后

謝謝你的觀看。

如果可以的話,麻煩幫忙點(diǎn)個(gè)贊,謝謝你。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容