mybatis-XML配置文件

来源:http://www.cnblogs.com/happyflyingpig/archive/2017/10/18/7654359.html
-Advertisement-
Play Games

<settings/> settings的配置內容 <typeAliases/> 別名 表 系統定義的typeAliases 別名 映射的類型 _byte byte _long long _short short _int int _integer int _double double _float ...


<?xml version="1.0" encoding="UTF-8" ?>
<!--plugins在配置文件中的位置必須要符合要求,否則會報錯--> <configuration> <properties/><!-- 屬性 --> <settings/><!-- 設置 --> <typeAliases/><!-- 類型命名(別名) --> <typeHandlers/><!-- 類型處理器 --> <objectFactory/><!-- 對象工廠 --> <plugins/><!-- 插件 --> <environments><!--配置環境--> <environment> <transactionManager/><!--事務管理器--> <dataSource/> <!--數據源--> </environment> </environments> <databaseIdProvider/><!-- 資料庫廠商標誌 --> <mappers/><!-- 映射器 --> <configuration/>

 <settings/>

 settings的配置內容

設置參數 描述 有效值 預設值
cacheEnabled 該配置影響的所有映射器中配置的緩存的全局開關 true | false true
lazyLoadingEnabled 延遲載入的全局開關。當開啟時,所有關聯對象都會延遲載入。 特定關聯關係中可通過設置fetchType屬性來覆蓋該項的開關狀態 true | false false
aggressiveLazyLoading 當啟用時,對任意延遲屬性的調用會使帶有延遲載入屬性的對象完整載入;反之,每種屬性將會按需載入。 true | false true
multipleResultSetsEnabled 是否允許單一語句返回多結果集(需要相容驅動)。 true | false true
useColumnLabel 使用列標簽代替列名。不同的驅動在這方面會有不同的表現, 具體可參考相關驅動文檔或通過測試這兩種不同的模式來觀察所用驅動的結果。 true | false true
useGeneratedKeys 允許 JDBC 支持自動生成主鍵,需要驅動相容。 如果設置為 true 則這個設置強制使用自動生成主鍵,儘管一些驅動不能相容但仍可正常工作(比如 Derby)。 true | false false
autoMappingBehavior 指定 MyBatis 應如何自動映射列到欄位或屬性。 NONE 表示取消自動映射;PARTIAL 只會自動映射沒有定義嵌套結果集映射的結果集。 FULL 會自動映射任意複雜的結果集(無論是否嵌套)。 NONE, PARTIAL, FULL PARTIAL
defaultExecutorType 配置預設的執行器。SIMPLE 就是普通的執行器;REUSE 執行器會重用預處理語句(prepared statements); BATCH 執行器將重用語句並執行批量更新。 SIMPLE REUSE BATCH SIMPLE
defaultStatementTimeout 設置超時時間,它決定驅動等待資料庫響應的秒數。 Any positive integer Not Set (null)
defaultFetchSize Sets the driver a hint as to control fetching size for return results. This parameter value can be override by a query setting. Any positive integer Not Set (null)
safeRowBoundsEnabled 允許在嵌套語句中使用分頁(RowBounds)。 true | false false
mapUnderscoreToCamelCase 是否開啟自動駝峰命名規則(camel case)映射,即從經典資料庫列名 A_COLUMN 到經典 Java 屬性名 aColumn 的類似映射。 true | false false
localCacheScope MyBatis 利用本地緩存機制(Local Cache)防止迴圈引用(circular references)和加速重覆嵌套查詢。 預設值為 SESSION,這種情況下會緩存一個會話中執行的所有查詢。 若設置值為 STATEMENT,本地會話僅用在語句執行上,對相同 SqlSession 的不同調用將不會共用數據。 SESSION | STATEMENT SESSION
jdbcTypeForNull 當沒有為參數提供特定的 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 指定當結果集中值為 null 的時候是否調用映射對象的 setter(map 對象時為 put)方法,這對於有 Map.keySet() 依賴或 null 值初始化的時候是有用的。註意基本類型(int、boolean等)是不能設置成 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 JAVASSIST (MyBatis 3.3 or above)

<typeAliases/> 別名

系統定義的typeAliases

別名

映射的類型

_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

<typeHandler/> 類型處理器

                    系統註冊的typeHandler簡介

 <environments/>

<--default:表明在預設的情況下,我們將啟用哪個數據源配置-->
<
environments default="development"> <environment id="development">
       <!-- type:
         JDBC:採用JDBC的方式管理事務
          MANAGED:採用容器方式管理事務,在JNDI數據源中經常使用
       自定義:使用自定義資料庫事務管理辦法
--> <transactionManager type="JDBC"/>
        <!--type
UNPOOLED,非連接池資料庫。
POOLED,連接池資料庫
--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis-learn" /> <property name="username" value="root"/> <property name="password" value="tiger"/> </dataSource> </environment> </environments>

 <databaseIdProvider/> 資料庫廠商標識:

  作用是指定SQL到對應的資料庫廠商提供的資料庫中運行

<databaseIdProvider type="DB_VENDOR">
  <property name="MySQL" value="mysql"/>       
  <property name="Oracle" value="oracle" />
  <property name="SQL Server" value="sqlserver" />
  <property name="DB2" value="db2" />
</databaseIdProvider>

 


  type="DB_VENDOR"是啟動MyBatis內部註冊的策略器。首先MyBatis會將你的配置讀取入Configuration類型裡面,在連接資料庫後調用getDatabaseProductName()方法區獲取資料庫的信息,然後用我們配置的name值去做匹配來得到DatabaseId。我們可以用下麵的代碼來獲得資料庫的ID

sqlSessionFactory.getConfiguration().getDatabaseId();

  我們也可以指定SQL在哪個資料庫廠商

<select parameterType="string" id="getRole" resultType="role" databaseId="mysql">
    select role_no as roleNo, role_name as roleName, note from t_role where role_no=#{roleNo,javaType=String,jdbcType=VARCHAR}
</select>

   在多了一個databaseId屬性的情況下,mybatis將提供如下規則:

  • 如果沒有配置<databaseIdProvider/>,那麼databaseId就會返回null;
  • 如果配置了<databaseIdProvider/>,MyBatis就會用配置的name值去匹配資料庫信息,如果匹配的上就會設置databaseId,否則依舊是null;
  • 如果Configuration的databaseId不為空,則它只會找到配置databaseId的SQL語句
  • MyBatis會載入不帶databaseId屬性和帶有匹配當前資料庫databaseId屬性的所有語句。如果同時找到帶有databaseId和不帶databaseId的相同語句,則後者會被捨棄;

 <mappers/>映射器

  引入映射器的方法:

  1.用文件路徑引入映射器

<mappers>
   <mapper resource="com/yihaomen/mybatis/model/DatabaseIdProvider.xml"/>
</mappers>

 

  2.用包名引入映射器

<mappers>
   <mapper resource="com.yihaomen.mybatis.model"/>
</mappers>

 

  3.用類註冊引入映射器

<mappers>
   <mapper resource="com.yihaomen.mybatis.mapper.DatabaseIdProviderMapper"/>
</mappers>

 

 

 

 

 

 

 

  參考文獻:

   [1] 楊開振 著,《深入淺出MyBatis技術原理與實戰》, 電子工業出版社,2016.09

 


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

-Advertisement-
Play Games
更多相關文章
  • 前言:去年剛工作的時候,也是剛剛正式接觸.net,當時瞭解了EF以及三種開發模式,Database First、Model First 、Code First。公司用的開發模式是Database First,由於公司有一套成熟的框架,我只需要按部就班的開發即可,因此就沒有詳細學習過這些開發模式,總覺 ...
  • C#多線程 一、使用線程的理由 1、可以使用線程將代碼同其他代碼隔離,提高應用程式的可靠性。 2、可以使用線程來簡化編碼。 3、可以使用線程來實現併發執行。 二、基本知識 1、進程與線程:進程作為操作系統執行程式的基本單位,擁有應用程式的資源,進程包含線程,進程的資源被線程共用,線程不擁有資源。 2 ...
  • 自己上網查了好多種方法,最後還是選了這種不收費,還挺好用的方法 為了用戶有一個好的體驗我將word、excel、ppt轉Pdf,Pdf轉Swf寫在服務上,因為我當時做的時候Pdf轉Swf會執行pdf2swf.exe彈出黑框,對用戶體驗不好,還有就是ppt轉swf時會有一個彈出框,提示正在發佈,我沒搞 ...
  • 1. JMS基本概念 JMS(Java Message Service) 即Java消息服務。它提供標準的產生、發送、接收消息的介面簡化企業應用的開發。 它支持兩種消息通信模型:點到點(point-to-point)(P2P)模型和發佈/訂閱(Pub/Sub)模型。 P2P 模型規定了一個消息只能有 ...
  • 之前沒課的時候寫過安居客的爬蟲,但那也是小打小鬧,那這次呢, 還是小打小鬧 哈哈,現在開始正式進行爬蟲書寫 首先,需要分析一下要爬取的網站的結構: 作為一名河南的學生,那就看看鄭州的二手房信息吧! 在上面這個頁面中,我們可以看到一條條的房源信息,從中我們發現了什麼,發現了連鄭州的二手房都是這麼的貴, ...
  • 在web.xml中配置載入spring時,發現項目無法運行;而去掉spring的配置時,項目可以被初始化。 此時應考慮到spring的配置文件中存在錯誤,以至於web容器無法對項目成功初始化,在web.xml中配置log4j, 根據列印的信息對spring的配置進行修改。 <context-para ...
  • 作者: 阿布 阿布量化版權所有 未經允許 禁止轉載 "abu量化系統github地址(歡迎+star,你的支持是我更新的動力!)" "本節ipython notebook" 上一節使用AbuFactorBuyBreak和AbuFactorSellBreak且混入基本止盈止損策略AbuFactorAt ...
  • 作者: 阿布 阿布量化版權所有 未經允許 禁止轉載 "abu量化系統github地址" (您的star是我的動力!) "本節ipython notebook" "本節界面操作教程視頻播放地址" 量化系統一般分為回測模塊、實盤模塊。 回測模塊:首先交易者編寫實現一個交易策略,它基於一段歷史的交易數據, ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...