java-mybaits-00301-SqlMapConfig
阿新 • • 發佈:2017-05-07
文檔 影響 映射類型 數據共享 cnblogs 環境 parameter 不同 文件
需求:
將數據庫連接參數單獨配置在db.properties中,只需要在SqlMapConfig.xml中加載db.properties的屬性值。
在SqlMapConfig.xml中就不需要對數據庫連接參數硬編碼。
將數據庫連接參數只配置在db.properties中,原因:方便對參數進行統一管理,其它xml可以引用該db.properties。
SqlMapConfig.xml可以引用java屬性文件中的配置信息如下:
在classpath下定義db.properties文件:
1、配置內容
mybatis的全局配置文件SqlMapConfig.xml,SqlMapConfig.xml中配置的內容和順序如下: properties(屬性) settings(全局配置參數) typeAliases(類型別名) typeHandlers(類型處理器) objectFactory(對象工廠) plugins(插件) environments(環境集合屬性對象) environment(環境子屬性對象) transactionManager(事務管理) dataSource(數據源) mappers(映射器)2、properties(屬性)
jdbc.driver=com.mysql.jdbc.Driver jdbc.urlSqlMapConfig.xml引用如下:=jdbc:mysql://localhost:3306/mybatis jdbc.username=root jdbc.password=mysql
<properties resource="db.properties"/> <environments default="development"> <environment id="development"> <transactionManager type註意: MyBatis 將按照下面的順序來加載屬性:="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>
- 在 properties 元素體內定義的屬性首先被讀取。
- 然後會讀取properties 元素中resource或 url 加載的屬性,它會覆蓋已讀取的同名屬性。
- 最後讀取parameterType傳遞的屬性,它會覆蓋已讀取的同名屬性。
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