MyBatis全域性配置檔案的詳解
簡介
MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和對映原生資訊,將介面和 Java 的 POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。
全域性配置檔案
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 屬性 --> <properties resource="db.properties"></properties> <!-- 別名 --> <typeAliases> <typeAlias type="com.example.mybatis.entity.User" value="u"></typeAlias> <package name="com.example.mybatis.enity" /> </typeAliases> <settings> <setting name="cacheEnabled" value="true" /> <setting name="lazyLoadingEnabled" value="true" /> <setting name="multipleResultSetsEnabled" value="true" /> <setting name="useColumnLabel" value="true" /> <setting name="useGeneratedKeys" value="false" /> <setting name="autoMappingBehavior" value="PARTIAL" /> <setting name="autoMappingUnknownColumnBehavior" value="WARNING" /> <setting name="defaultExecutorType" value="SIMPLE" /> <setting name="defaultStatementTimeout" value="25" /> <setting name="defaultFetchSize" value="100" /> <setting name="safeRowBoundsEnabled" value="false" /> <setting name="mapUnderscoreToCamelCase" value="false" /> <setting name="localCacheScope" value="SESSION" /> <setting name="jdbcTypeForNull" value="OTHER" /> <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" /> </settings> <!-- 環境們 --> <environments default="development"> <!-- id為環境的唯一標識 --> <environment id="development"> <!-- 事物管理 --> <transactionManager type="JDBC" /> <!-- 資料來源 --> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <!-- 多資料庫支援 --> <databaseIdProvider type="DB_VENDOR"> <property name="MySQL" value="mysql"></property> <property name="Oracle" value="oracle"></property> <property name="SQL Server" value="sql server"></property> </databaseIdProvider> <!-- sql對映檔案註冊 --> <mappers> <mapper resource="com/example/mybatis/dao/UserMapper.xml"></mapper> <mapper class="com.example.mybatis.dao.UserMapperAnnotaion"></mapper> </mappers> </configuration>
標籤介紹
1.properties
properties標籤是為MyBatis的全域性配置檔案設定屬性,由外部檔案引入,一般使用配置檔案類來引入資料
源。
資料來源的屬性檔案的名稱為編寫規範為xxxx.properties,博主這邊設定的資料來源名稱為db.properties,配置文
件的內容編寫規範為key=value,等於號兩邊沒有空格例如:
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:XE
username=root
password=root
properties的引入方式有兩種,一種是resource:在包內部映入,例如屬性檔案在config包下面,那麼它的
2.settings
settings設定在全域性配置檔案中比較重要
<settings> <setting name="cacheEnabled" value="true" /> <setting name="lazyLoadingEnabled" value="true" /> <setting name="multipleResultSetsEnabled" value="true" /> <setting name="useColumnLabel" value="true" /> <setting name="useGeneratedKeys" value="false" /> <setting name="autoMappingBehavior" value="PARTIAL" /> <setting name="autoMappingUnknownColumnBehavior" value="WARNING" /> <setting name="defaultExecutorType" value="SIMPLE" /> <setting name="defaultStatementTimeout" value="25" /> <setting name="defaultFetchSize" value="100" /> <setting name="safeRowBoundsEnabled" value="false" /> <setting name="mapUnderscoreToCamelCase" value="false" /> <setting name="localCacheScope" value="SESSION" /> <setting name="jdbcTypeForNull" value="OTHER" /> <setting name="lazyLoadTriggerMethods"value="equals,clone,hashCode,toString" /> </settings>
3.typeAliases
typeAliases是為java型別起別名的一個標籤,預設的為類名的小寫,如果設定了value那麼它的別名為value的值,package設定的是為當前包包括子包下面的所有類,這就有個問題,如果當前包和子包下面的類名一樣,那麼就會起衝突,這樣樣的解決方式就是使用註解方式,@Alias("user"),使用的前提是得引入mybatis庫檔案並設定環境變數:
<typeAliases>
<typeAlias type="com.example.mybatis.entity.User" value="u"></typeAlias>
<package name="com.example.mybatis.enity" />
</typeAliases>
4.environments
environments設定開發環境,可以配置多個環境,由單個environment配置環境,在environment中必須有transactionManager和dataSource標籤才算完整,environment的id為設定環境的唯一id標籤,由environments中的default設定使用哪一種環境,transactionManager中type有兩種:JDBC,代表使用jdbc的方式進行事物的提交和回滾;MANAGED代表使用j2ee的方式進行提交和回滾,dataSource為資料來源,type為資料來源型別:UNPOOLED|POOLED|JNDI,UNPOOLED
UNPOOLED:該資料來源的實現只是在每次請求時開啟和關閉連線。雖然速度有點慢,但對於不需要立即可用連線效能的簡單應用程式來說,這是一個不錯的選擇。在這個效能區域中,不同的資料庫也有所不同,因此對於某些資料庫來說,池和這個配置可能不太重要。
POOLED: 資料來源池JDBC連線物件的實現,以避免建立新連線例項所需的初始連線和身份驗證時間。這是併發web應用程式實現最快響應的流行方法。
JNDI:該資料來源的實現是為了與容器(如EJB或應用程式伺服器)一起使用,這些容器可以集中配置資料來源或外部,並在JNDI上下文中引用它。這個資料來源配置只需要兩個屬性:
5.databaseIdProvider
dataBaseIdProvider是為全域性設定多個數據源,可以設定多個數據庫,如mysql,oracle,sql server等資料庫,type="DB_VENDOR"就是得到資料庫廠商表示來執行不同的sql。
<!-- 多資料庫支援 -->
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"></property>
<property name="Oracle" value="oracle"></property>
<property name="SQL Server" value="sql server"></property>
</databaseIdProvider>
使用方法在sql對映檔案mapper中設定,在查詢標籤中設是databaseId="oracle",設定資料庫執行的sql語句
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatis.dao.UserMapper">
<select id="findUserById" parameterType="int"
resultType="com.example.mybatis.entity.User" databaseId="oracle">
select id, username, sex from
t_user where id = #{id}
</select>
<select id="findUserById" parameterType="int"
resultType="com.example.mybatis.entity.User" databaseId="mysql">
select id, username, sex from
t_user where id = #{id}
</select>
</mapper>
6.mappers
mappers為將sql對映註冊帶全域性檔案當中
<!-- sql對映檔案註冊 -->
<mappers>
<mapper resource="com/example/mybatis/dao/UserMapper.xml"></mapper>
<mapper class="com.example.mybatis.dao.UserMapperAnnotaion"></mapper>
</mappers>
設定方式有三種:
resource :引入java包中的sql對映檔案mapper.xml;
class:直接引用介面,指向介面,在介面中使用註解的方式操作
public interface UserMapperAnnotaion {
@Select("select id, username, sex from t_user where id = #{id}")
public User findUserById();
}
url:映入網路路徑和磁碟路徑下的的xml檔案;
博主初學MyBatis,就什麼錯誤的地方還請指出,望諒解。