SqlMapConfig.xml全局配置文件解析(mybatis)

来源:http://www.cnblogs.com/Zyf2016/archive/2017/02/07/6373555.html
-Advertisement-
Play Games

原文 http://www.cnblogs.com/selene/p/4607004.html 一:SqlMapConfig.xml配置文件的內容和配置順序如下 二:properties屬性 作用:將數據連接單獨配置在db.properties中,只需要在SqlMapConfig.xml中載入db. ...


原文  http://www.cnblogs.com/selene/p/4607004.html

一: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 中,定義很多的 statement , statement 需要 parameterType 指定輸入參數的類型、需要 resultType 指定輸出結果的映射類型。

如果在指定類型時輸入類型全路徑,不方便進行開發,可以針對 parameterType 或 resultType指定的類型定義一些別名,在 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.java 和 mapper.xml 放在一個目錄 ,且同名。

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

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

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一:運算符 1.算數運算: a除以b a除以c為整除。輸出小數點後面的數字 a//b 為地板除。只去整數,小數點後面的數字舍掉 2.比較運算 3.賦值運算 4.位運算 ps:暫時用不到 5.邏輯運算 註意:所有的數據類型都有布爾值(True/False)。為False的數據有(0,' ',None) ...
  • 原文:http://blog.csdn.net/ysughw/article/details/8992322 ContextLoaderListener監聽器的作用就是啟動Web容器時,自動裝配ApplicationContext的配置信息。因為它實現了ServletContextListener這 ...
  • springmvc在處理器方法中通常返回的是邏輯視圖,如何定位到真正的頁面,就需要通過視圖解析器。 springmvc里提供了多個視圖解析器,InternalResourceViewResolver就是其中之一: 最常用的視圖解析器:InternalResourceViewResolver 當處理器 ...
  • xmlns是XML Namespaces的縮寫,中文名稱是XML(標準通用標記語言的子集)命名空間。 產生原因 比如: 下麵這個 XML 文檔攜帶著某個表格中的信息: table tr tdApples/td tdBananas/td /tr /table 下麵這個 XML 文檔攜帶有關桌子的信息( ...
  • 非常慚愧的說,由於之前一直使用的是windowservice,安裝apache來進行伺服器佈置的,這種方式也是最簡單最直接的方式, 但是由於php的服務大多都是linux棧的,咱們也不能落後呀,在寫了php半年之後,開始擁有的自己的第一臺centos的伺服器, 實話說,centos真的是簡潔,部署完 ...
  • 一、指針的四個關鍵概念1、指針的類型2、指針指向的類型3、指針的值,也就是指針指向的地址4、指針自己所占用的記憶體空間註意:指針變數所存的內容就是記憶體的地址編號!例如:int **pp = NULL;1、指針的類型是 int **2、指針指向的類型 int *3、指針的值為NULL4、指針自己所站記憶體 ...
  • 一:語法和語句 # :註釋 \ : 轉譯回車,繼續上一行,在一行語句較長的情況下可以使用其來切分成多行,因其可讀性差所以不建議使用 ; : 將兩個語句連接到一行,可讀性差,不建議使用 : : 將代碼的頭和體分開 語句(代碼塊)用縮進方式體現不同的代碼級別,建議採用4個空格(不要使用tab) pyth ...
  • [TOC] 2.2.7 新的型別轉換操作符(Type Conversion Operators) 1. static_cast 將一個值以符合邏輯的方式轉型。這可看做是“利用原值重建一個臨時對象,併在設立初值時使用型別轉換”。 3. const_cast 設定或去除型別的常數性,亦可去除volati ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...