spring-mybatis-1(xml 配置)

spring-mybatis配置

applicationContext-mybatis.xml

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--配置MyBaties全局配置文件-->
        <property name="configLocation" value="classpath:config/mybatis-config.xml"/>
        <!--掃描 mapper需要的xml文件 -->
        <property name="mapperLocations" value="classpath:com/dn/spring/mybatis/xml/*Mapper.xml"/>
    </bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 掃描 mapper 接口所在的包-->
        <property name="basePackage" value="com.dn.spring.mybatis.dao"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>

mybatis 全局配置

mybatis-config.xml 全局配置文件

  • Properties(屬性)
  • Settings(全局參數設置)
  • typeAliases(類型別名)
  • typeHandlers(類型處理器)
  • objectFactory(對象工廠)
  • plugins(插件)
  • environments(環境信息集合)
    • environment(單個環境信息)
  • transactionManager(事物)
  • dataSource(數據源)
  • mappers(映射器)

Properties(屬性)

properties元素主要是用來定義配置外在化,比如數據庫的連接屬性等。

<properties resource="org/mybatis/example/config.properties">  
  <property name="username" value="dev_user"/>  
  <property name="password" value="F2Fa3!33TYyg"/>  
</properties>  
其中的屬性就可以在整個配置文件中使用來替換需要動態配置的屬性值。比如在數據源中使用的例子:
<dataSource type="POOLED">  
  <property name="driver" value="${driver}"/>  
  <property name="url" value="${url}"/>  
  <property name="username" value="${username}"/>  
  <property name="password" value="${password}"/>  
</dataSource> 
在properties元素體內指定的屬性首先被讀取。
然後根據properties元素中的resource屬性讀取類路徑下屬性文件或根據url屬性指定的路徑讀取屬性文件,
並覆蓋已讀取的同名屬性。

Settings(全局參數設置)

    <!-- settings是 MyBatis 中極爲重要的調整設置,它們會改變 MyBatis 的運行時行爲。-->  
    <settings>
        <!-- 該配置影響的所有映射器中配置的緩存的全局開關。默認值true -->  
        <setting name="cacheEnabled" value="true"/>

         <!--延遲加載的全局開關。當開啓時,所有關聯對象都會延遲加載。
             特定關聯關係中可通過設置fetchType屬性來覆蓋該項的開關狀態。
             默認值false
          -->  
         <setting name="lazyLoadingEnabled" value="true"/>  
         
         <!-- 是否允許單一語句返回多結果集(需要兼容驅動)。 默認值true -->  
          <setting name="multipleResultSetsEnabled" value="true"/>  
         
        <!-- 
             使用列標籤代替列名。不同的驅動在這方面會有不
             同的表現,具體可參考相關驅動文檔或通過測試這兩種不同的模式來觀察所用驅動的結果。
             默認值true -->  
          <setting name="useColumnLabel" value="true"/>  
         
           <!-- 
           允許 JDBC 支持自動生成主鍵,需要驅動兼容。 
           如果設置爲 true 則這個設置強制使用自動生成主鍵,儘管一些驅動不能兼容但仍可正常工作(比如 Derby)。
           默認值false  -->  
          <setting name="useGeneratedKeys" value="false"/>  
         
          <!--  
           指定 MyBatis 應如何自動映射列到字段或屬性。 
           NONE 表示取消自動映射;
           PARTIAL 只會自動映射沒有定義嵌套結果集映射的結果集。 
           FULL 會自動映射任意複雜的結果集(無論是否嵌套)。
            默認值PARTIAL 
           -->
            <setting name="autoMappingBehavior" value="PARTIAL"/>  
                
            <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>  
         <!--  
              配置默認的執行器。
              SIMPLE 就是普通的執行器;
              REUSE 執行器會重用預處理語句(prepared statements); 
              BATCH 執行器將重用語句並執行批量更新。
              默認SIMPLE  
         -->
         <setting name="defaultExecutorType" value="SIMPLE"/>  
              
        <!-- 設置超時時間,它決定驅動等待數據庫響應的秒數。 -->  
         <setting name="defaultStatementTimeout" value="25"/>  
                
         <setting name="defaultFetchSize" value="100"/>  
             
         <!-- 允許在嵌套語句中使用分頁(RowBounds)默認值False -->  
          <setting name="safeRowBoundsEnabled" value="false"/>  
              
          <!-- 
           是否開啓自動駝峯命名規則(camel case)映射,
           即從經典數據庫列名 A_COLUMN 到經典 Java 屬性名 aColumn 的類似映射。  
           默認false 
          -->  
          <setting name="mapUnderscoreToCamelCase" value="false"/>  
          <!-- 
             MyBatis 利用本地緩存機制(Local Cache)防止循環引用(circular references)和加速重複嵌套查詢。  
             默認值爲 SESSION,這種情況下會緩存一個會話中執行的所有查詢。  
             若設置值爲 STATEMENT,本地會話僅用在語句執行上,對相同 SqlSession 的不同調用將不會共享數據。
          -->  
          <setting name="localCacheScope" value="SESSION"/>  

          <!-- 
              當沒有爲參數提供特定的 JDBC 類型時,爲空值指定 JDBC 類型。 
              某些驅動需要指定列的 JDBC 類型,多數情況直接用一般類型即可,
              比如 NULL、VARCHAR 或 OTHER。 
           -->  
           <setting name="jdbcTypeForNull" value="OTHER"/>  
           <!--   指定哪個對象的方法觸發一次延遲加載。  -->  
        <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>  
    </settings>

typeHandlers(類型處理器)

無論是 MyBatis 在預處理語句(PreparedStatement)中設置一個參數時,還是從結果集中取出一個值時, 都會用類型處理器將獲取的值以合適的方式轉換成 Java 類型。
下表描述了一些默認的類型處理器。
可以重寫類型處理器或創建自己的類型處理器來處理不支持的或非標準的類型。
具體的做法爲:實現org.apache.ibatis.type.TypeHandler接口,或繼承一個很便利的類org.apache.ibatis.type.BaseTypeHandler,
然後可以選擇性地將它映射到一個JDBC類型。
比如:

<typeHandlers>  
  <typeHandler handler="org.mybatis.example.ExampleTypeHandler"/>  
</typeHandlers>  

plugins(插件)

MyBatis允許你在已映射的語句執行過程中的某一點進行攔截調用。默認情況下,Mybatis允許使用插件來攔截的方法調用包括:
Executor(update,query,flushStatements,commit,rollback,getTransaction,close,isClosed)
ParameterHandler(getParameterObejct,setParameters)
ResultSetHandler(handlerResultSets,handlerOutputParameters)
StatementHandler(prepare,parameterize,batch,update,query)
通過MyBatis提供強大的機制,使用插件是非常簡單的,只需要實現Interceptor接口,並指定想要攔截的方法簽名即可

@Intercepts({@Signature(  
  type= Executor.class,  
  method = "update",  
  args =   
{MappedStatement.class,Object.class})}) 
public class ExamplePlugin implements Interceptor  { 
   public Object intercept(Invocation invocation) throws Throwable {
    return  invocation.proceed();  
  } 
  public Object plugin(Object target)  { 
  return Plugin.wrap(target, this);  
  } 
  public void setProperties(Properties properties) {
  }  
}  
<plugins>  
  <plugin interceptor="org.mybatis.example.ExamplePlugin">  
    <property name="someProperty" value="100"/>  
  </plugin>  
</plugins>  

參考

mybatis --XML 映射配置文件
mybatis配置參數及默認值
jdbc,mybatis中fetchsize使用,批處理方案

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章