1. 程式人生 > >java-mybaits-00301-SqlMapConfig

java-mybaits-00301-SqlMapConfig

文檔 影響 映射類型 數據共享 cnblogs 環境 parameter 不同 文件

1、配置內容

mybatis的全局配置文件SqlMapConfig.xml,SqlMapConfig.xml中配置的內容和順序如下:   properties(屬性)   settings(全局配置參數)   typeAliases(類型別名)   typeHandlers(類型處理器)   objectFactory(對象工廠)   plugins(插件)   environments(環境集合屬性對象)     environment(環境子屬性對象)     transactionManager(事務管理)     dataSource(數據源)   mappers(映射器)

2、properties(屬性)

需求:   將數據庫連接參數單獨配置在db.properties中,只需要在SqlMapConfig.xml中加載db.properties的屬性值。   在SqlMapConfig.xml中就不需要對數據庫連接參數硬編碼。   將數據庫連接參數只配置在db.properties中,原因:方便對參數進行統一管理,其它xml可以引用該db.properties。   SqlMapConfig.xml可以引用java屬性文件中的配置信息如下:   在classpath下定義db.properties文件:
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url
=jdbc:mysql://localhost:3306/mybatis     jdbc.username=root     jdbc.password=mysql
  SqlMapConfig.xml引用如下:
    <properties resource="db.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>
註意: MyBatis 將按照下面的順序來加載屬性:
  • 在 properties 元素體內定義的屬性首先被讀取。
  • 然後會讀取properties 元素中resource或 url 加載的屬性,它會覆蓋已讀取的同名屬性。
  • 最後讀取parameterType傳遞的屬性,它會覆蓋已讀取的同名屬性。
因此,通過parameterType傳遞的屬性具有最高優先級,resource或 url 加載的屬性次之,最低優先級的是 properties 元素體內定義的屬性。 建議:   不要在properties元素體內添加任何屬性值,只將屬性值定義在properties文件中。   在properties文件中定義屬性名要有一定的特殊性,如:XXXXX.XXXXX.XXXX

3、setting(配置)

mybatis全局配置參數,全局參數將會影響mybatis的運行行為。   比如:開啟二級緩存、開啟延遲加載。。   自動會做性能的調優,不用額外再做。   以下為基本配置:
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
defaultStatementTimeout 設置驅動程序等待一個數據庫響應的秒數。 Any positive integer Not Set (null)
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

4、typeAliases(類型別名)

在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、自定義別名:

  在SqlMapConfig.xml中配置:
<typeAliases>
    <!-- 單個別名定義 -->
    <typeAlias alias="user" type="cn.itcast.mybatis.po.User"/>
    <!-- 批量別名定義,掃描整個包下的類,別名為類名(首字母大寫或小寫都可以) -->
    <package name="cn.itcast.mybatis.po"/>
    <package name="其它包"/>
</typeAliases>

5、typeHandlers(類型處理器)

  類型處理器用於java類型和jdbc類型映射,如下:
<select id="findUserById" parameterType="int" resultType="user">
       select * from user where id = #{id}
</select>
  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-任何兼容的字符串類型,作為代碼存儲(而不是索引)。

6、mapppers(映射器)

Mapper配置的幾種方法:

6.1 <mapper resource=" " />

使用相對於類路徑的資源 如:<mapper resource="sqlmap/User.xml" />

6.2 <mapper url=" " />

使用完全限定路徑 如:<mapper url="file:///D:\workspace_spingmvc\mybatis_01\config\sqlmap\User.xml" />

6.3 <mapper class=" " />

使用mapper接口類路徑 如:<mapper class="cn.itcast.mybatis.mapper.UserMapper"/> 按照上邊的規範,將mapper.java和mapper.xml放在一個目錄 ,且同名。 技術分享 註意:此種方法要求mapper接口名稱和mapper映射文件名稱相同,且放在同一個目錄中。

6.4 <package name=""/>【推薦】

註冊指定包下的所有mapper接口 如:<package name="cn.itcast.mybatis.mapper"/> 註意:此種方法要求mapper接口名稱和mapper映射文件名稱相同,且放在同一個目錄中。
    <mappers>
        <!-- 自動映射所有 com.ds365.mybatis.mapper 下的接口 -->
        <!-- 使用的是mapper代理方法 -->
        <!-- 接口名==mapperxml文件名 -->
        <!-- 接口和xml同目錄 -->
        <package name="com.ds365.mybatis.mapper" />
    </mappers>

java-mybaits-00301-SqlMapConfig