mybatis入門基礎(三)----SqlMapConfig.xml全局配置文件解析


一:SqlMapConfig.xml配置文件的內容和配置順序如下

  1. properties(屬性)
  2. settings(全局配置參數)
  3. typeAiases(類型別名)
  4. typeHandlers(類型處理器)
  5. objectFactory(對象工廠)
  6. plugins(插件)
  7. environments(環境集合屬性對象)mappers(映射器)
    1. environment(環境子屬性對象)
    2. transactionManager(事物管理)
    3. datesource(數據源
  8. mappers(映射器)

二:properties屬性

  作用:將數據連接單獨配置在db.properties中,只需要在SqlMapConfig.xml中加載db.properties的屬性值,在SqlMapConfig.xml中就不需要對數據庫連接參數進行硬編碼。數據庫連接參數只配置在db.properties中,方便對參數進行統一管理,其它xml可以引用該db.properties。

db.properties的內容:

jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis jdbc.username=root jdbc.password=root

在SqlMapConfig.xml中加載db.properties

 <!-- 加載數據庫文件db.properties -->
<properties resource="db.properties"> <!-- properties中還可以配置一些屬性名和屬性值,此處的優先加載 --> <!-- <property name="driver" value=""/> --> </properties> <!-- 和spring整合后 environments配置將廢除--> <environments default="development"> <environment id="development"> <!-- 使用jdbc事務管理,事務控制由mybatis管理--> <transactionManager type="JDBC" /> <!-- 數據庫連接池,由mybatis管理--> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments>

properties特性:

注意:

  • 在properties元素體內定義的屬性優先讀取。
  • 然后讀取properties元素中resource或url加載的屬性,它會覆蓋已讀取的同名屬性。
  • 最后讀取parameterType傳遞的屬性,它會覆蓋已讀取的同名屬性

建議:

  不要在properties元素體內添加任何屬性值,只將屬性值定義在properties文件中。

  在properties文件中定義屬性名要有一定的特殊性,如xxxx.xxxx(jdbc.driver)

三:settings全局參數配置

  mybatis框架運行時可以調整一些運行參數。比如,開啟二級緩存,開啟延遲加載等等。全局參數會影響mybatis的運行行為。

mybatis-settings的配置屬性以及描述

setting(設置) Description(描述) valid Values(驗證值組) Default(默認值)
cacheEnabled 在全局范圍內啟用或禁用緩存配置 任何映射器在此配置下。 true | false TRUE
lazyLoadingEnabled 在全局范圍內啟用或禁用延遲加載。禁用時,所有相關聯的將熱加載。 true | false TRUE
aggressiveLazyLoading 啟用時,有延遲加載屬性的對象將被完全加載后調用懶惰的任何屬性。否則,每一個屬性是按需加載。 true | false TRUE
multipleResultSetsEnabled 允許或不允許從一個單獨的語句(需要兼容的驅動程序)要返回多個結果集。 true | false TRUE
useColumnLabel 使用列標簽,而不是列名。在這方面,不同的驅動有不同的行為。參考驅動文檔或測試兩種方法來決定你的驅動程序的行為如何。 true | false TRUE
useGeneratedKeys 允許JDBC支持生成的密鑰。兼容的驅動程序是必需的。此設置強制生成的鍵被使用,如果設置為true,一些驅動會不兼容性,但仍然可以工作。 true | false FALSE
autoMappingBehavior 指定MyBatis的應如何自動映射列到字段/屬性。NONE自動映射。 PARTIAL只會自動映射結果沒有嵌套結果映射定義里面。 FULL會自動映射的結果映射任何復雜的(包含嵌套或其他)。

NONE,PARTIAL,FULL

PARTIAL
defaultExecutorType 配置默認執行人。SIMPLE執行人確實沒有什么特別的。 REUSE執行器重用准備好的語句。 BATCH執行器重用語句和批處理更新。

SIMPLE,REUSE,BATCH

SIMPLE
safeRowBoundsEnabled 允許使用嵌套的語句RowBounds。 true | false FALSE
mapUnderscoreToCamelCase 從經典的數據庫列名A_COLUMN啟用自動映射到駱駝標識的經典的Java屬性名aColumn。 true | false FALSE
localCacheScope MyBatis的使用本地緩存,以防止循環引用,並加快反復嵌套查詢。默認情況下(SESSION)會話期間執行的所有查詢緩存。如果localCacheScope=STATMENT本地會話將被用於語句的執行,只是沒有將數據共享之間的兩個不同的調用相同的SqlSession。

SESSION

STATEMENT

SESSION
dbcTypeForNull 指定為空值時,沒有特定的JDBC類型的參數的JDBC類型。有些驅動需要指定列的JDBC類型,但其他像NULL,VARCHAR或OTHER的工作與通用值。 JdbcType enumeration. Most common are: NULL, VARCHAR and OTHER OTHER
lazyLoadTriggerMethods 指定觸發延遲加載的對象的方法。 A method name list separated by commas equals,clone,hashCode,toString
defaultScriptingLanguage 指定所使用的語言默認為動態SQL生成。 A type alias or fully qualified class name.

org.apache.ibatis.scripting.xmltags

.XMLDynamicLanguageDriver

callSettersOnNulls 指定如果setter方法​​或地圖的put方法時,將調用檢索到的值是null。它是有用的,當你依靠Map.keySet()或null初始化。注意原語(如整型,布爾等)不會被設置為null。 true | false FALSE
logPrefix 指定的前綴字串,MyBatis將會增加記錄器的名稱。 Any String Not set
logImpl 指定MyBatis的日志實現使用。如果此設置是不存在的記錄的實施將自動查找。 SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING Not set
proxyFactory 指定代理工具,MyBatis將會使用創建懶加載能力的對象。 CGLIB | JAVASSIST  CGLIB

官方文檔settings的例子

<setting name="cacheEnabled" value="true"/>
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="multipleResultSetsEnabled" value="true"/>
    <setting name="useColumnLabel" value="true"/>
    <setting name="useGeneratedKeys" value="false"/>
    <setting name="autoMappingBehavior" value="PARTIAL"/>
    <setting name="defaultExecutorType" value="SIMPLE"/>
    <setting name="defaultStatementTimeout" value="25"/>
    <setting name="safeRowBoundsEnabled" value="false"/>
    <setting name="mapUnderscoreToCamelCase" value="false"/>
    <setting name="localCacheScope" value="SESSION"/>
    <setting name="jdbcTypeForNull" value="OTHER"/>
    <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
View Code

四:typeAiases(別名)--重點掌握

  在mapper.xml中,定義很多的statementstatement需要parameterType指定輸入參數的類型、需要resultType指定輸出結果的映射類型。

     如果在指定類型時輸入類型全路徑,不方便進行開發,可以針對parameterTyperesultType指定的類型定義一些別名,在mapper.xml中通過別名定義,方便開發。

4.1.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 

 

4.2.自定義別名

  4.2.1:單個別名定義(在SqlMapConfig.xml)  

<!-- 別名定義:針對單個別名定義 type:類型的路徑; alias:別名 -->
    <typeAliases><typeAlias type="com.mybatis.entity.User" alias="user"/></typeAliases>

    UserMapper.xml引用別名:

<select id="findUserById" parameterType="int" resultType="user" >
      select * from t_user where id=#{id}
</select>

  4.2.2:批量定義別名(常用) 

<!-- 批量別名的定義:
        package:指定包名,mybatis會自動掃描包中的pojo類,自動定義別名,別名就是類名(首字母大寫或小寫都可以)
 -->
     <typeAliases>
         <package name="com.mybatis.entity"/>
<package name="其它包"/>
</typeAliases>

五:typeHandlers(類型處理器)

  mybatis中通過typeHandlers完成jdbc類型和java類型的轉換。

  通常情況下,mybatis提供的類型處理器滿足日常需要,不需要自定義.

mybatis支持類型處理器:

類型處理器

Java類型

JDBC類型

BooleanTypeHandler 

Boolean,boolean 

任何兼容的布爾值

ByteTypeHandler 

Byte,byte 

任何兼容的數字或字節類型

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[] 

任何兼容的字節流類型

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 

任意

其他或未指定類型

EnumTypeHandler 

Enumeration類型

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

六:mappers(映射配置)

6.1:通過resource加載單個映射文件

<!-- 加載映射文件 -->
    <mappers>
    <!--通過resource方法一次加載一個映射文件  -->
        <mapper resource="sqlmap/User.xml"/>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>

6.2:通過mapper接口加載單個映射文件

    <!-- 通過mapper接口加載單個映射配置文件
            遵循一定的規范:需要將mapper接口類名和mapper.xml映射文件名稱保持一致,且在一個目錄中;
            上邊規范的前提是:使用的是mapper代理方法;
      -->
         <mapper class="com.mybatis.mapper.UserMapper"/> 

按照上邊的規范,將mapper.javamapper.xml放在一個目錄 ,且同名。

6.3:批量加載mapper(推薦使用)

    <!-- 批量加載映射配置文件,mybatis自動掃描包下面的mapper接口進行加載
        遵循一定的規范:需要將mapper接口類名和mapper.xml映射文件名稱保持一致,且在一個目錄中;
            上邊規范的前提是:使用的是mapper代理方法;
      -->
    <package name="com.mybatis.mapper"/> 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM