日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

一文帶你掌握mybatis的所有全局配置

 

MyBatis全局配置文件

配置properties

可以在全局配置文件中配置properties標簽來進行外部配置

設置屬性的方式有三種

  • 在properties的屬性節點resource或url所指定的資源文件中配置
  • 在properties的子節點property中配置
  • 在構建SqlSessionFactory時通過方法傳入參數

外部配置文件引入

jdbc.driver=com.MySQL.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=123456
<!-- 使用 properties來引入外部配置文件內容-->
<!-- resource  引入類路徑下的資源
     url  引入網路或磁盤路徑下的資源
 -->
<properties resource="jdbc.properties">
</properties>
<!-- 數據庫配置 -->
<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"/>
        <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>

property子節點配置

<!-- 也可以使用property子節點來進行配置 -->
<properties resource="jdbc.properties">
    <property name="jdbc.password" value="123456"/>
    <!-- 啟用默認值特性 -->
    <property name="org.Apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/>
    <!-- 修改默認值的分隔符 -->
    <property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="?:"/>
</properties>
<!-- 數據庫配置 -->
<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="${jdbc.driver}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <!-- 可以使用:來為占位符設置默認值,如果沒有讀取到該屬性的值,會使用該默認值
             該特性默認關閉,需要配置        <property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/>
             如果開啟該特性,默認使用:分隔
             可以使用         <property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="?:"/>
             來修改默認分隔符
             -->
            <property name="password" value="${jdbc.password?:123456}"/>
        </dataSource>
    </environment>
</environments>

實例化時方法傳參

public static SqlSessionFactory createFactory(){
    // 獲取到mybatis-config.xml配置文件,進而構建SqlSessionFactory
    InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("mybatis-config.xml");
    Properties props = new Properties();
    props.put("jdbc.password","123456");
    return new SqlSessionFactoryBuilder().build(is,props);
}

三種方式的順序

  • 首先讀取property子節點中指定的屬性
  • 再讀取使用resources或url引入的外部配置文件中屬性,并覆蓋之前的同名屬性
  • 最后讀取作為方法傳遞的參數,并覆蓋之前的同名屬性

配置settings

進行mybatis的自定義設置

設置名

描述

有效值

默認值

cacheEnabled

全局性地開啟或關閉所有映射器配置文件中已配置的任何緩存。

true | false

true

lazyLoadingEnabled

延遲加載的全局開關。當開啟時,所有關聯對象都會延遲加載。 特定關聯關系中可通過設置 fetchType 屬性來覆蓋該項的開關狀態。

true | false

false

aggressiveLazyLoading

開啟時,任一方法的調用都會加載該對象的所有延遲加載屬性。 否則,每個延遲加載屬性會按需加載(參考 lazyLoadTriggerMethods)。

true | false

false (在 3.4.1 及之前的版本中默認為 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

autoMappingUnknownColumnBehavior

指定發現自動映射目標未知列(或未知屬性類型)的行為。NONE: 不做任何反應WARNING: 輸出警告日志('
org.apache.ibatis.session.AutoMappingUnknownColumnBehavior' 的日志等級必須設置為 WARN)FAILING: 映射失敗 (拋出 SqlSessionException)

NONE, WARNING, FAILING

NONE

defaultExecutorType

配置默認的執行器。SIMPLE 就是普通的執行器;REUSE 執行器會重用預處理語句(PreparedStatement); BATCH 執行器不僅重用語句還會執行批量更新。

SIMPLE REUSE BATCH

SIMPLE

defaultStatementTimeout

設置超時時間,它決定數據庫驅動等待數據庫響應的秒數。

任意正整數

未設置 (null)

defaultFetchSize

為驅動的結果集獲取數量(fetchSize)設置一個建議值。此參數只可以在查詢設置中被覆蓋。

任意正整數

未設置 (null)

defaultResultSetType

指定語句默認的滾動策略。(新增于 3.5.2)

FORWARD_ONLY | SCROLL_SENSITIVE | SCROLL_INSENSITIVE | DEFAULT(等同于未設置)

未設置 (null)

safeRowBoundsEnabled

是否允許在嵌套語句中使用分頁(RowBounds)。如果允許使用則設置為 false。

true | false

False

safeResultHandlerEnabled

是否允許在嵌套語句中使用結果處理器(ResultHandler)。如果允許使用則設置為 false。

true | false

True

mapUnderscoreToCamelCase

是否開啟駝峰命名自動映射,即從經典數據庫列名 A_COLUMN 映射到經典 JAVA 屬性名 aColumn。

true | false

False

localCacheScope

MyBatis 利用本地緩存機制(Local Cache)防止循環引用和加速重復的嵌套查詢。 默認值為 SESSION,會緩存一個會話中執行的所有查詢。 若設置值為 STATEMENT,本地緩存將僅用于執行語句,對相同 SqlSession 的不同查詢將不會進行緩存。

SESSION | STATEMENT

SESSION

jdbcTypeForNull

當沒有為參數指定特定的 JDBC 類型時,空值的默認 JDBC 類型。 某些數據庫驅動需要指定列的 JDBC 類型,多數情況直接用一般類型即可,比如 NULL、VARCHAR 或 OTHER。

JdbcType 常量,常用值:NULL、VARCHAR 或 OTHER。

OTHER

lazyLoadTriggerMethods

指定對象的哪些方法觸發一次延遲加載。

用逗號分隔的方法列表。

equals,clone,hashCode,toString

defaultScriptingLanguage

指定動態 SQL 生成使用的默認腳本語言。

一個類型別名或全限定類名。

org.apache.ibatis.scripting.xmltags.XMLLanguageDriver

defaultEnumTypeHandler

指定 Enum 使用的默認 TypeHandler 。(新增于 3.4.5)

一個類型別名或全限定類名。

org.apache.ibatis.type.EnumTypeHandler

callSettersOnNulls

指定當結果集中值為 null 的時候是否調用映射對象的 setter(map 對象時為 put)方法,這在依賴于 Map.keySet() 或 null 值進行初始化時比較有用。注意基本類型(int、boolean 等)是不能設置成 null 的。

true | false

false

returnInstanceForEmptyRow

當返回行的所有列都是空時,MyBatis默認返回 null。 當開啟這個設置時,MyBatis會返回一個空實例。 請注意,它也適用于嵌套的結果集(如集合或關聯)。(新增于 3.4.2)

true | false

false

logPrefix

指定 MyBatis 增加到日志名稱的前綴。

任何字符串

未設置

logImpl

指定 MyBatis 所用日志的具體實現,未指定時將自動查找。

SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING

未設置

proxyFactory

指定 Mybatis 創建可延遲加載對象所用到的代理工具。

CGLIB | JAVASSIST

JAVASSIST (MyBatis 3.3 以上)

vfsImpl

指定 VFS 的實現

自定義 VFS 的實現的類全限定名,以逗號分隔。

未設置

useActualParamName

允許使用方法簽名中的名稱作為語句參數名稱。 為了使用該特性,你的項目必須采用 Java 8 編譯,并且加上 -parameters 選項。(新增于 3.4.1)

true | false

true

configurationFactory

指定一個提供 Configuration 實例的類。 這個被返回的 Configuration 實例用來加載被反序列化對象的延遲加載屬性值。 這個類必須包含一個簽名為static Configuration getConfiguration() 的方法。(新增于 3.2.3)

一個類型別名或完全限定類名。

未設置

shrinkWhitespacesInSql

從SQL中刪除多余的空格字符。請注意,這也會影響SQL中的文字字符串。 (新增于 3.5.5)

true | false

false

defaultSqlProviderType

Specifies an sql provider class that holds provider method (Since 3.5.6). This class apply to the type(or value) attribute on sql provider annotation(e.g. @SelectProvider), when these attribute was omitted.

 

 

配置typeAliases類型別名

類型別名可以為java類型設置別名,之后使用全類名時可以使用別名

<typeAliases>
    <!-- typeAlias為某個類起別名 -->
    <typeAlias type="com.zhanghe.study.mybatis.model.User" alias="User"/>

    <!-- 為某個包下所有類批量起別名
        默認值為類名首字母小寫
     -->
    <package name="com.zhanghe.study.mybatis.model"/>
</typeAliases>

也可以在類上使用@Alias注解來設置該類的別名

配置類型處理器typeHandlers

數據庫類型和java類型進行轉換

實現 org.apache.ibatis.type.TypeHandler 接口, 或繼承 org.apache.ibatis.type.BaseTypeHandler, 并且可以將它映射到一個 JDBC 類型

@MappedJdbcTypes(JdbcType.VARCHAR)
public class ExampleTypeHandler extends BaseTypeHandler<String> {

  @Override
  public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
    ps.setString(i, parameter);
  }

  @Override
  public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
    return rs.getString(columnName);
  }

  @Override
  public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
    return rs.getString(columnIndex);
  }

  @Override
  public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
    return cs.getString(columnIndex);
  }
}
<typeHandlers>
  <typeHandler handler="org.mybatis.example.ExampleTypeHandler"/>
</typeHandlers>

配置插件plugins

mybatis可以使用插件來在映射語句執行過程中的某一點進行攔截調用,包括

  • Executor (update、query、flushStatements、commit、rollback、getTransaction、close、isClose)
  • ParameterHandler (getParameterObject、setParameters)
  • ResultSetHandler (handleResultSets、handleOutputParameters)
  • StatementHandler (prepare、parameterize、batch、update、query)

需要實現Interceptor接口,并指定想要攔截的方法簽名來使用插件

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

注意:如果有多個插件攔截相同方法的時候,會按照配置的先后順序來進行包裝代理,在執行時會執行最外層的插件,也就是逆向執行

配置環境environments

mybatis可以配置多個環境,可以連接多個數據庫,但是每個SqlSessionFactory實例只可以選擇一種環境

在構建sqlSessionFactory的時候可以指定選擇創建哪個環境

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);
<!-- 環境 default表示默認使用環境  -->
<environments default="development">
    <environment id="development">
        <!-- 事務管理器有兩種類型
            1、JDBC  該配置直接使用了JDBC的提交和回滾,依賴從數據源獲得的連接來管理事務作用域
            2、MANAGED 使用容器來管理事務的整個生命周期(spring會使用自帶的管理器,不需要配置mybatis的事務管理器)
         -->
        <transactionManager type="JDBC"/>
        <!-- 數據源有三種類型
            1、UNPOOLED  每次請求時打開和關閉連接
                額外屬性  - defaultTransactionIsolationLevel  默認的連接事務隔離級別
                         - defaultNetworkTimeout  等待數據庫操作完成的默認網絡超時時間
            2、POOLED  利用連接池的概念將JDBC連接對象組織起來,避免了創建新的連接實例
                額外屬性
                    - poolMaximumactiveConnections 在任意時間可存在的活動連接數,默認10
                    - poolMaximumIdleConnections  任意時間可能存在的空閑連接數
                    - poolMaximumCheckoutTime  在被強制返回之前,池中連接被檢出時間,默認20000毫秒
                    - poolTimeToWait  如果獲取連接花費了很長的時間,連接池會打印狀態日志并重新嘗試獲取一個連接,默認20000毫秒
                    - poolMaximumLocalBadConnectionTolerance  如果一個線程獲取到一個壞的連接,數據源允許這個線程嘗試重新獲取一個新的連接,
                                                              嘗試次數不應該超過poolMaximumIdleConnections與poolMaximumLocalBadConnectionTolerance之和,默認為3
                    - poolPingQuery  發送到數據庫的偵測查詢,用來檢驗連接是否正常工作   默認 NO PING QUERY SET
                    - poolPingEnabled  是否啟用偵測查詢  默認false
                    - poolPingConnectionsNotUsedFor  配置poolPingQuery的頻率(可以設置為和數據庫連接超時時間一樣,避免不必要的偵測)  默認0
            3、JNDI  在外部配置數據源,然后一個JNDI上下文數據源引用
                額外屬性
                    - initial_context  用來在InitialContext中尋找上下文
                    - data_source  引用數據源實例的上下文路徑
         -->
        <dataSource type="POOLED">
            <property name="driver" value="${jdbc.driver}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <!-- 可以使用:來為占位符設置默認值,如果沒有讀取到該屬性的值,會使用該默認值
             該特性默認關閉,需要配置        <property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/>
             如果開啟該特性,默認使用:分隔
             可以使用         <property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="?:"/>
             來修改默認分隔符
             -->
            <property name="password" value="${jdbc.password?:123456}"/>
        </dataSource>
    </environment>

也可以實現
org.apache.ibatis.datasource.DataSourceFactory接口來自定義數據源實現,然后進行配置

配置數據庫廠商標識 databaseIdProvider

mybatis可以根據不同的數據庫廠商執行不同的語句,基于映射語句中的databaseId屬性。mybatis會加載帶有匹配當前數據庫databaseId屬性個所有不帶databaseId屬性的語句。如果同時找到帶有databaseId的不帶databaseId的相同語句,后者會被舍棄

<!-- 數據庫廠商標識 -->
<databaseIdProvider type="DB_VENDOR">
  <!-- name為使用DatabaseMetaData#getDatabaseProductName()返回的廠商名稱
             value為所設置的別名,使用databaseId時使用別名即可 -->
  <property name="MySQL" value="mysql"/>
  <property name="Oracle" value="oracle"/>
</databaseIdProvider>

在mapper.xml中可以配置不同數據庫的sql語句

<!-- 查詢數據的方法 -->
<!-- mysql -->
<select id="selectUser" resultType="User" databaseId="mysql">
    select * from users where id = #{id}
</select>
<!-- oracle -->
<select id="selectUser" resultType="User" databaseId="oracle">
    select * from users where id = #{id}
</select>

可以實現
org.apache.ibatis.mapping.DatabaseIdProvider接口自定義DatabaseIdProvider

配置映射器mappers

將寫好的sql映射文件(mapper.xml)注冊到全局配置文件中

<!-- mapper配置 -->
<mappers>
    <!-- resource  引入類路徑下的資源  -->
    <mapper resource="mapper/UserMapper.xml"/>
    <!-- url  引入網絡或者磁盤路徑下的sql映射文件 -->
    <mapper url=""/>
    <!-- class  基于注解的方式,注冊類文件 -->
    <mapper class="com.zhanghe.study.mybatis.mapper.UserMapper"/>
    <!-- 批量注冊 注冊整個包下的-->
    <package name="com.zhanghe.study.mybatis.mapper"/>
</mappers>

分享到:
標簽:mybatis
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定