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

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

    • 分享

      深入淺出MyBatis

       aaie_ 2016-05-19

      Configuration是干嘛的

      Configuration就像是Mybatis的總管,Mybatis的所有配置信息都存放在這里,此外,它還提供了設置這些配置信息的方法。Configuration可以從配置文件里獲取屬性值,也可以通過程序直接設置。Configuration里可供配置的屬性有:

      1.       properties屬性

      1)       配置示例

      1. <properties resource="org/mybatis/example/config.properties">   
      2. <property name="username" value="dev_user"/>   
      3. <property name="password" value="F2Fa3!33TYyg"/>   
      4. </properties>  

      2)       用途

      properties里配置的屬性將被存放在Configuration的variables變量里,供Mybatis使用。此外在配置文件中,也可以使用這些屬性,用來對配置項實現動態(tài)配置。比如:

      1. <dataSource type="POOLED">   
      2. <property name="driver" value="${driver}"/>   
      3. <property name="url" value="${url}"/>   
      4. <property name="username" value="${username}"/>   
      5. <property name="password" value="${password}"/>   
      6. </dataSource>  

      3)       注意事項

      resource里也可指定屬性值,并且resource里屬性值的優(yōu)先級高于property子節(jié)點里配置的值,也就是說resource的同名屬性將會覆蓋于property子節(jié)點里的值。

      2.        settings設置

      1)       配置示例

      1. <settings>   
      2. <setting name="cacheEnabled" value="true"/>   
      3. <setting name="lazyLoadingEnabled" value="true"/>   
      4. <setting name="multipleResultSetsEnabled" value="true"/>   
      5. <setting name="useColumnLabel" value="true"/>   
      6. <setting name="useGeneratedKeys" value="false"/>   
      7. <setting name="enhancementEnabled" value="false"/>   
      8. <setting name="defaultExecutorType" value="SIMPLE"/>   
      9. <setting name="defaultStatementTimeout" value="25000"/>   
      10. </settings>  

      2)       用途

      setting節(jié)點里配置的值會直接改寫Configuration對應的變量值,這些變量描述的是Mybatis的全局運行方式,如果對這些屬性的含義不熟悉的話建議不要配置,使用默認值即可。下面這個表格描述了各個配置項的含義和默認值:

      設置參數

      描述

      有效值

      默認值

      cacheEnabled

      這個配置使全局的映射器啟用或禁用緩存。

      true | false

      true

      lazyLoadingEnabled

      全局啟用或禁用延遲加載。當禁用時,所有關聯對象都會即時加載。

      true | false

      true

      aggressiveLazyLoading

      當啟用時,有延遲加載屬性的對象在被調用時將會完全加載任意屬性。否則,每種屬性將會按需要加載。

      true | false

      true

      multipleResultSetsEnabled

      允許或不允許多種結果集從一個單獨的語句中返回(需要適合的驅動)。

      true | false

      true

      useColumnLabel

      使用列標簽代替列名。不同的驅動在這方便表現不同。參考驅動文檔或充分測試兩種方法來決定所使用的驅動。

      true | false

      true

      useGeneratedKeys

      允許JDBC支持生成的鍵。需要適合的驅動。如果設置為true則這個設置強制生成的鍵被使用,盡管一些驅動拒絕兼容但仍然有效(比如Derby)。

      true | false

      false

      autoMappingBehavior

      指定MyBatis如何自動映射列到字段/屬性。PARTIAL只會自動映射簡單,沒有嵌套的結果。FULL會自動映射任意復雜的結果(嵌套的或其他情況)。

      NONE,

      PARTIAL,

      FULL

      PARTIAL

       

      3)       注意事項

      謹慎修改這些配置值。

      3.       typeAliases類型命名

      1)       配置示例

      1. <typeAliases>   
      2. <typeAlias alias="Author" type="domain.blog.Author"/>   
      3. <typeAlias alias="Blog" type="domain.blog.Blog"/>   
      4. <typeAlias alias="Comment" type="domain.blog.Comment"/>   
      5. <typeAlias alias="Post" type="domain.blog.Post"/>   
      6. <typeAlias alias="Section" type="domain.blog.Section"/>   
      7. <typeAlias alias="Tag" type="domain.blog.Tag"/>   
      8. </typeAliases>  

      2)       用途

      別名是為Java類型命名一個短的名字。它只用在XML配置文件里,用來減少類完全限定名的多余部分。例如在配置文件里需要使用domain.blog.Author的地方可以簡單的使用Author替換。

      3)       注意事項

      Mybatis里有一些默認的別名,不要覆蓋這些別名:

      別名

      映射的類型

      _byte

      byte

      _long

      long

      _short

      short

      _int

      int

      _integer

      int

      _double

      double

      _float

      float

      _boolean

      boolean

      string

      String

      byte

      Byte

      long

      Long

      short

      Short

      int

      Integer

      integer

      Integer

      double

      Double

      float

      Float

      boolean

      Boolean

      date

      Date

      decimal

      BigDecimal

      bigdecimal

      BigDecimal

      object

      Object

      map

      Map

      hashmap

      HashMap

      list

      List

      arraylist

      ArrayList

      collection

      Collection

      iterator

      Iterator

       

      4.       typeHandlers類型處理器

      1)       配置示例

      1. <typeHandlers>   
      2. <typeHandler javaType="String" jdbcType="VARCHAR" handler="org.mybatis.example.ExampleTypeHandler"/>   
      3. </typeHandlers>  

      2)       用途

      無論是MyBatis在預處理語句中設置一個參數,還是從結果集中取出一個值時,類型處理器被用來將獲取的值以合適的方式轉換成Java類型。

      3)       注意事項

      Mybatis已經有了若干個類型處理器了,編寫自己的類型處理器時勿重新發(fā)明輪子。

      類型處理器

      Java類型?

      JDBC類型?

      BooleanTypeHandler

      Boolean,boolean

      任何兼容的布爾值

      ByteTypeHandler

      Byte,byte

      任何兼容的數字或字節(jié)類型

      ShortTypeHandler

      Short,short

      任何兼容的數字或短整型

      IntegerTypeHandler

      Integer,int

      任何兼容的數字和整型

      LongTypeHandler

      Long,long

      任何兼容的數字或長整型

      FloatTypeHandler

      Float,float

      任何兼容的數字或單精度浮點型

      DoubleTypeHandler

      Double,double

      任何兼容的數字或雙精度浮點型

      BigDecimalTypeHandler

      BigDecimal

      任何兼容的數字或十進制小數類型

      StringTypeHandler

      String

      CHAR和VARCHAR類型?

      ClobTypeHandler

      String

      CLOB和LONGVARCHAR類型?

      NStringTypeHandler

      String

      NVARCHAR和NCHAR類型?

      NClobTypeHandler

      String

      NCLOB類型?

      ByteArrayTypeHandler

      byte[]

      任何兼容的字節(jié)流類型

      BlobTypeHandler

      byte[]

      BLOB和LONGVARBINARY類型

      DateTypeHandler

      Date(java.util)?

      TIMESTAMP類型?

      DateOnlyTypeHandler

      Date(java.util)?

      DATE類型?

      TimeOnlyTypeHandler

      Date(java.util)?

      TIME類型?

      SqlTimestampTypeHandler

      Timestamp(java.sql)

      TIMESTAMP類型?

      SqlDateTypeHandler

      Date(java.sql)?

      DATE類型?

      SqlTimeTypeHandler

      Time(java.sql)?

      TIME類型?

      ObjectTypeHandler

      Any

      其他或未指定類型

      EnumTypeHandler

      Enumeration類型

      VARCHAR-任何兼容的字符串類型,作為代碼存儲(而不是索引)

       

      5.       objectFactory對象工廠

      略(不常用)

      6.       plugins插件

      1)       配置示例

      1. <plugins>   
      2. <plugin interceptor="org.mybatis.example.ExamplePlugin">   
      3. <property name="someProperty" value="100"/>   
      4. </plugin>   
      5. </plugins>  

      2)       用途

      插件可以改變某些類的執(zhí)行, MyBatis允許被插件來攔截的類有:

      1. Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)   
      2. ParameterHandler (getParameterObject, setParameters)   
      3. ResultSetHandler (handleResultSets, handleOutputParameters)   
      4. StatementHandler (prepare, parameterize, batch, update, query)  

      3)       注意事項

      插件可以改變MyBatis底層的行為,因此功能非常強大。但在對MyBatis深入理解前不要急著編寫自己的插件,因為若插件編寫不當,將導致整個MyBatis都不能正常工作。本系列的后面會有專門的章節(jié)介紹插件機制以及兩個有用的插件,歡迎持續(xù)關注。

      7.       environments環(huán)境

      environments里可以配置多個environment,每個environment對應一個數據庫環(huán)境。一個完整的定義如下:

      1. <environments default="development">   
      2. <environment id="development">   
      3. <transactionManager type="JDBC">   
      4. </transactionManager>   
      5. <dataSource type="POOLED">   
      6. <property name="driver" value="${driver}"/>   
      7. <property name="url" value="${url}"/>   
      8. <property name="username" value="${username}"/>   
      9. <property name="password" value="${password}"/>   
      10. </dataSource>   
      11. </environment>   
      12. </environments>  

      environments里的default屬性表示默認的數據庫環(huán)境,與某個environment的id相對應。

      1)       environment環(huán)境變量

      environment通過id屬性與其他數據庫環(huán)境區(qū)別。它有兩個子節(jié)點:

      a)       transactionManager事務管理器

      MyBatis中有兩種事務管理器類型(也就是type=”[JDBC|MANAGED]”):

      l JDBC這個配置直接簡單使用了JDBC的提交和回滾設置。它依賴于從數據源得到的連接來管理事務范圍。

      l MANAGED這個配置幾乎沒做什么。它從來不提交或回滾一個連接。而它會讓容器來管理事務的整個生命周期(比如SpringJEE應用服務器的上下文)

      b)       dataSource數據源

      MyBatis中有三種數據源類型(也就是type=”[UNPOOLED | POOLED| JNDI]”):

      l UNPOOLED –這個數據源的實現是每次被請求時簡單打開和關閉連接,需要配置的屬性:

      driver – 這是JDBC驅動的Java類的完全限定名

      url – 這是數據庫的JDBC URL地址。

      username – 登錄數據庫的用戶名。

      password – 登錄數據庫的密碼。

      defaultTransactionIsolationLevel – 默認的連接事務隔離級別。

      l POOLED –mybatis實現的簡單的數據庫連接池類型,它使得數據庫連接可被復用,不必在每次請求時都去創(chuàng)建一個物理的連接。

      l JNDI 通過jndi從tomcat之類的容器里獲取數據源。

      8.       mapper映射器

      1)       配置示例

      1. <mappers>   
      2. <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>   
      3. <mapper resource="org/mybatis/builder/BlogMapper.xml"/>   
      4. <mapper resource="org/mybatis/builder/PostMapper.xml"/>   
      5. </mappers>  

      2)       用途

      Mappers用于告訴Mybatis去哪里尋找sql映射文件。sql映射文件是Mybatis最靈活的地方。sql映射文件在后續(xù)的章節(jié)里會進一步詳細描述,歡迎持續(xù)關注。

      如何構建configuration

      前面介紹了Configuration的各個屬性以及在文件里配置他們的方法。這一節(jié)介紹如何從文件里解析這些配置項以及簡化配置的方法。Configuration在SqlSessionFactoryBuilder創(chuàng)建SqlSessionFactory時創(chuàng)建,通過XMLConfigBuilder的parse方法創(chuàng)建。下面一個個的介紹:

      1.       properties屬性

      通過XMLConfigBuilder的propertiesElement方法解析,解析后的結果存放在Configuration的variables變量里。解析順序,先解析子節(jié)點里的屬性值,再解析resource屬性指定的配置文件里的值。后者會覆蓋前者的值。

      2.        settings設置

      通過XMLConfigBuildersettingsElement方法解析,解析前校驗屬性是否是可配置的,只要有一個不可配置,整個mybatis就會異常退出,所以配置這些屬性務必小心。

      3.       typeAliases類型命名

      通過XMLConfigBuildertypeAliasesElement方法解析,在該方法內部調用TypeAliasRegistryregisterAlias方法完成注冊,并將注冊的別名存入本地緩存中XMLConfigBuilder調用的registerAlias方法并沒有什么特別的地方,但TypeAliasRegistry卻提供了批量注冊別名的方法,該方法只需要一個包名參數。該方法會在指定的包路徑下掃描可注冊的類(接口和內部類除外),并以類的簡單名為key完整名為value注冊別名。這個方法極大的簡化了配置,后續(xù)章節(jié)將要介紹的springmybatis的整合模塊里就使用了這個方法使得配置量大大減少。

      4.       typeHandlers類型處理器

      通過XMLConfigBuildertypeHandlerElement方法解析,在該方法內部調用TypeHandlerRegistryregister方法完成注冊,并將注冊的類型處理器存入本地緩存中。同typeAliases一樣,TypeHandlerRegistry也提供了批量注冊的方法,該方法同樣只需要一個包名參數。該方法會在指定的包路徑下掃描可注冊的類(接口、抽象類和內部類除外),不過只注冊那些配置了MappedTypes注解的類。這個方法極大的簡化了配置,后續(xù)章節(jié)將要介紹的springmybatis的整合模塊里就使用了這個方法使得配置量大大減少。

      5.       objectFactory對象工廠

      略(不常用)

      6.       plugins插件

      通過XMLConfigBuilder的pluginElement方法解析,在該方法內部實例化插件對象后存入Configuration的interceptorChain變量里。

      7.       environments環(huán)境

      通過XMLConfigBuilderenvironmentsElement方法解析,在該方法內,先判斷默認是否指定了環(huán)境ID,沒有的話就使用默認的環(huán)境ID嗎,然后在各個環(huán)境里取ID對應的項。也就是說一個Configuration只會保存一個數據庫環(huán)境,如果要配置多數據庫環(huán)境的話需要創(chuàng)建多個Configuration對象。在改方法內先解析事務工廠、再解析數據源、然后再解析數據庫環(huán)境,在解析數據庫環(huán)境的過程中會訪問一次數據庫,以取得數據庫類型信息。

      8.        mapper映射器

      通過XMLConfigBuilder的mapperElement方法解析,在該方法內部通過調用XMLMapperBuilder的parse方法完成。mapper的解析是mybatis的核心功能,涉及的流程較復雜,在下一章將專門分析,敬請期待。

       

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多