mybatis-XML配置文件


<?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

 


免責聲明!

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



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