乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      (四)Mybatis從入門到入土——?jiǎng)e名、配置文件以及引入mapper

       小仙女本仙人 2021-05-04

      這是mybatis系列第4篇。沒(méi)看前文的建議先去【Java冢狐】公眾號(hào)中查看前文,方便理解和掌握

      別名

      為什么需要使用別名?

      在xml文件中有很多需要類完整的類名的地方,十分的冗長(zhǎng),為了減輕我們的工作量和復(fù)雜度mybatis支持我們給某個(gè)類起一個(gè)別名,然后通過(guò)別名可以訪問(wèn)到指定的類型。

      別名的用法

      使用別名之前需要先在mybatis中注冊(cè)別名,而注冊(cè)別名有3種方式。

      方式1

      使用typeAlias元素進(jìn)行注冊(cè)

      如下:

      <typeAliases>
          <typeAlias type="完整的類型名稱" alias="別名" />
      </typeAliases>
      

      typeAliases元素中可以包含多個(gè)typeAlias子元素,每個(gè)typeAlias可以給一個(gè)類型注冊(cè)別名,有2個(gè)屬性需要指定:

      • type:完整的類型名稱
      • alias:別名

      方式2

      通過(guò)packege元素批量注冊(cè)

      上面我們通過(guò)typeAlias元素可以注冊(cè)一個(gè)別名,如果我們有很多類需要注冊(cè),需要寫很多typeAlias配置。

      mybatis為我們提供了批量注冊(cè)別名的方式,通過(guò)package元素,如下:

      <typeAliases>
          <package name="需要掃描的包"/>
      </typeAliases>
      

      這個(gè)也是在typeAliases元素下面,不過(guò)這次使用的是package元素,package有個(gè)name屬性,可以指定一個(gè)包名,mybatis會(huì)加載這個(gè)包以及子包中所有的類型,給這些類型都注冊(cè)別名,別名名稱默認(rèn)會(huì)采用類名小寫的方式,如UserModel的別名為usermodel

      方式3

      package結(jié)合@Alias批量注冊(cè)并指定別名

      方式2中通過(guò)package可以批量注冊(cè)別名,但是容易出現(xiàn)多個(gè)類名相同的類。

      所以在package方式批量注冊(cè)別名的時(shí)候,我們可以給類中添加一個(gè)@Alias注解來(lái)給這個(gè)類指定別名:

      @Alias("user")
      public class UserModel {
      }
      

      當(dāng)mybatis掃描類的時(shí)候,發(fā)現(xiàn)類上有Alias注解,會(huì)取這個(gè)注解的value作為別名,如果沒(méi)有這個(gè)注解,會(huì)將類名小寫作為別名,如同方式2。

      別名不區(qū)分大小寫

      mybatis默認(rèn)為很多類型提供了別名

      別名的原理

      mybatis允許我們給某種類型注冊(cè)一個(gè)別名,別名和類型之間會(huì)建立映射關(guān)系,這個(gè)映射關(guān)系存儲(chǔ)在一個(gè)map對(duì)象中,key為別名的名稱,value為具體的類型,當(dāng)我們通過(guò)一個(gè)名稱訪問(wèn)某種類型的時(shí)候,mybatis根據(jù)類型的名稱,先在別名和類型映射的map中按照key進(jìn)行查找,如果找到了直接返回對(duì)應(yīng)的類型,如果沒(méi)找到,會(huì)將這個(gè)名稱當(dāng)做完整的類名去解析成Class對(duì)象,如果這2步解析都無(wú)法識(shí)別這種類型,就會(huì)報(bào)錯(cuò)。

      別名使用建議

      別名的方式可以簡(jiǎn)化類型的寫法,原本很長(zhǎng)一串的UserModel對(duì)象,現(xiàn)在只用寫個(gè)user就行了,用起來(lái)十分的方便和簡(jiǎn)潔。但是從維護(hù)上面來(lái)講,不是很方便。

      所以建議自定義的類盡量別使用別名,而對(duì)mybatis中內(nèi)置的一些別名我們需要知道。

      屬性配置文件詳解

      連接數(shù)據(jù)庫(kù)的配置,我們是直接寫在mybatis全局配置文件中的,但是上線以后可能需要進(jìn)行一些改動(dòng)切換數(shù)據(jù)庫(kù),并不是十分的優(yōu)化,所以我們通常將一些需要運(yùn)維修改的配置信息(如:db配置、郵件配置、redis配置等等各種配置)放在一個(gè)properties配文件中,然后上線時(shí),只需要運(yùn)維去修改這個(gè)配置文件就可以了,根本不用他們?nèi)バ薷暮痛a相關(guān)的文件。

      mybatis也支持我們通過(guò)外部properties文件來(lái)配置一些屬性信息。

      mybatis配置屬性信息有3種方式。

      方式1:property元素中定義屬性

      屬性定義

      mybatis全局配置文件中通過(guò)properties元素來(lái)定義屬性信息,如下:

      <configuration>
          <properties>
              <property name="屬性名稱" value="屬性對(duì)應(yīng)的值"/>
          </properties>
      </configuration>
      

      上面通過(guò)property元素的方式進(jìn)行配置屬性信息:

      • name:屬性的名稱
      • value:屬性的值。

      如:

      <property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
      
      使用${屬性名稱}引用屬性的值

      屬性已經(jīng)定義好了,我們可以通過(guò)${屬性名稱}引用定義好的屬性的值,如:

      <property name="driver" value="${jdbc.driver}"/>
      

      方式2:resource引入配置文件

      方式1中,我們的配置文件還是寫在全局配置文件中,mybatis支持從外部引入配置文件,可以把配置文件寫在其他外部文件中,然后進(jìn)行引入。

      引入classes路徑中的配置文件
      <configuration>
          <properties resource="配置文件路徑"/>
      </configuration>
      

      properties元素有個(gè)resource屬性,值為配置文件相對(duì)于classes的路徑,配置文件我們一般放在src/main/resource目錄,這個(gè)目錄的文件編譯之后會(huì)放在classes路徑中。

      方式3:url的方式引入遠(yuǎn)程配置文件

      mybatis還提供了引入遠(yuǎn)程配置文件的方式,如下:

      <properties url="遠(yuǎn)程配置文件的路徑" />
      

      這次還是使用properties元素,不過(guò)使用的是url屬性,如:

      <properties url="http:///properties/config.properties" />
      

      屬性配置文件使用建議

      上面我們說(shuō)了3中方式,第2中方式是比較常見(jiàn)的做法,建議大家可以使用第二種方式來(lái)引入外部資源配置文件。

      如果3種方式如果我們都寫了,mybatis會(huì)怎么走?

      • 方式1和方式2都存在的時(shí)候,方式2的配置會(huì)覆蓋方式1的配置。
      • 如果方式2和方式3都存在的時(shí)候,方式3會(huì)失效

      mybatis會(huì)先讀取方式1的配置,然后讀取方式2或者方式3的配置,會(huì)將1中相同的配置給覆蓋。

      mybatis中引入mapper的3種方式

      mapper xml文件是非常重要的,我們寫的sql基本上都在里面,使用mybatis開(kāi)發(fā)項(xiàng)目的時(shí)候,和mybatis相關(guān)的大部分代碼就是寫sql,基本上都是和mapper xml打交道。

      編寫好的mapper xml需要讓mybatis知道,我們?cè)趺醋宮ybatis知道呢?

      可以通過(guò)mybatis全局配置文件進(jìn)行引入,主要有3種方式。

      方式1:使用mapper resouce屬性注冊(cè)mapper xml文件

      目前我們所涉及到的各種例子都是采用的這種方式,使用下面的方法進(jìn)行引入:

      <mappers>
          <mapper resource="Mapper xml的路徑(相對(duì)于classes的路徑)"/>
      </mappers>
      

      注意事項(xiàng)

      • 一般情況下,我們會(huì)創(chuàng)建一個(gè)和Mapper xml中namespace同名的Mapper接口,Mapper接口會(huì)和Mapper xml文件進(jìn)行綁定
      • mybatis加載mapper xml的時(shí)候,會(huì)去查找namespace對(duì)應(yīng)的Mapper接口,然后進(jìn)行注冊(cè),我們可以通過(guò)Mapper接口的方式去訪問(wèn)Mapper xml中的具體操作
      • Mapper xml和Mapper 接口配合的方式是比較常見(jiàn)的做法,也是強(qiáng)烈建議大家使用的

      方式2:使用mapper class屬性注冊(cè)Mapper接口

      引入Mapper接口

      mybatis全局配置文件中引入mapper接口,如下:

      <mappers>
              <mapper class="接口的完整類名" />
      </mappers>
      

      這種情況下,mybais會(huì)去加載class對(duì)應(yīng)的接口,然后還會(huì)去加載和這個(gè)接口同一個(gè)目錄的同名的xml文件。

      如:

      <mappers>
              <mapper class="zhonghu.chat01.demo1.UserMapper" />
      </mappers>
      

      上面這種寫法,mybatis會(huì)自動(dòng)去注冊(cè)UserMapper接口,還會(huì)去查找下面的文件:

      zhonghu.chat01.demo1.UserMapper.xml
      

      大家以后開(kāi)發(fā)項(xiàng)目的時(shí)候估計(jì)也會(huì)看到這種寫法,Mapper接口和Mapper xml文件放在同一個(gè)包中。

      方式3:使用package元素批量注冊(cè)Mapper接口

      批量注冊(cè)Mapper接口

      上面說(shuō)2種方式都是一個(gè)個(gè)注冊(cè)mapper的,如果我們寫了很多mapper,是否能夠批量注冊(cè)呢?

      mybatis提供了掃描包批量注冊(cè)的方式,需要在mybatis全局配置文件中加入下面配置:

      <mappers>
          <package name="需要掃描的包" />
      </mappers>
      

      mybatis會(huì)掃描package元素中name屬性指定的包及子包中的所有接口,將其當(dāng)做Mapper 接口進(jìn)行注冊(cè),所以一般我們會(huì)創(chuàng)建一個(gè)mapper包,里面放Mapper接口和同名的Mapper xml文件。

      使用注意

      方式3會(huì)掃描指定包中所有的接口,把這些接口作為Mapper接口進(jìn)行注冊(cè),掃描到的類型只要是接口就會(huì)被注冊(cè),所以指定的包中通常我們只放Mapper接口,避免存放一些不相干的類或者接口。

      關(guān)于配置和源碼

      本次講解到的一些配置都是在mybatis全局配置文件中進(jìn)行配置的,這些元素配置是有先后順序的,具體元素是在下面的dtd文件中定義的:

      http:///dtd/mybatis-3-config.dtd
      

      建議大家去看一下這個(gè)dtd配置文件。

      總結(jié)

      1. 掌握別名注冊(cè)的3種方式,建議大家盡量少使用自定義別名
      2. 掌握屬性配置3種方式
      3. 掌握mapper注冊(cè)的3種方式及需要注意的地方

      最后

      • 如果覺(jué)得看完有收獲,希望能關(guān)注一下,順便給我點(diǎn)個(gè)贊,這將會(huì)是我更新的最大動(dòng)力,感謝各位的支持
      • 歡迎各位關(guān)注我的公眾號(hào)【java冢狐】,專注于java和計(jì)算機(jī)基礎(chǔ)知識(shí),保證讓你看完有所收獲,不信你打我
      • 求一鍵三連:點(diǎn)贊、轉(zhuǎn)發(fā)、在看。
      • 如果看完有不同的意見(jiàn)或者建議,歡迎多多評(píng)論一起交流。感謝各位的支持以及厚愛(ài)。

      ——我是冢狐,和你一樣熱愛(ài)編程。

      歡迎關(guān)注公眾號(hào)“Java冢狐”獲取最新消息

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多