mybatis的配置文件裏的配置標籤
一、properties
二、settings
<settings>
<!---mapUnderscoreToCamelCase:開啓駝峯命名法,即數據庫中的例字段可以按駝峯命名法對應javaBean裏的屬性->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!--jdbcTypeForNull: null值在數據庫中對應什麼值,mybatis默認是other值,但是這個值有的數據庫是如果
識別的比如orcal-->
<setting name="jdbcTypeForNull" value="NULL"/>
<!--lazyLoadingEnabled:懶加載開啓,開啓之後關聯的值可以在使用的時候再進行加載 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- aggressiveLazyLoading:開啓後會完全加載,如果false時會按需加載-->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
三、typeAliases
別名處理器,見
四、typeHandlers
處理java數據於數據庫數據類型的對應
<typeHandlers>
</typeHandlers>
五、plugins
插件可能攔截以下四大對象:
Executor:執行器
ParameterHandler:參數處理器
ResultSetHandler:結果集處理器
StatementHandler:sql語句的處理器
六、 environments 環境配置
mybatis可以配置多個環境,用default指定使用某個環境,進行環境的切換;
environment標籤裏必須有 transactionManager和dataSource子標籤,其id表示一個environment的標識
transactionManager:事物管理器
type:事物管理器的類型,有JDBC(JdbcTransactionFactory)|MANAGED(ManagedTransactionFactory)兩種形式
自定義事物管理器:實現TransactionFactory接口.type指定爲全類名
dataSource:數據源
type:UNPOOLED|POOLED|JNDI
自定義:type類全名
<environments default="dev_mysql">
<environment id="dev_mysql">
<transactionManager type="JDBC"></transactionManager>
<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>
<environment id="dev_oracle">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${orcl.driver}" />
<property name="url" value="${orcl.url}" />
<property name="username" value="${orcl.username}" />
<property name="password" value="${orcl.password}" />
</dataSource>
</environment>
</environments>
事務控制,數據庫配置在結合spring後,基本都是由spring做控制管理的
七、databaseIdProvider
支持多數據庫廠商,mybatist移值控制,比如在mysql和 oracle不現數據庫
type="DB_VENDOR":VendorDatabaseIdProvider
作用就是得到數據庫廠商的標識(驅動getDatabaseProductName()),mybatis就能根據數據庫廠商標識來執行不同的sql;
<databaseIdProvider type="DB_VENDOR">
<property name="MySql" value="mysql"/>
<property name="Oracle" value="oracle"/>
<property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>
在mapper映射文件裏可以通過(databaseId)指定上面通過 databaseIdProvider定義的數據庫廠商的別名來確定現在鏈接的哪種數據庫,則執行相應數據庫對應的sql語句,eg:
<select id="getEmpById" resultType="com.duanrong.mybatis.bean.Employee databaseId = 'mysql'>
select * from employee where id=#{id}
</select>
<select id="getEmpById" resultType="com.duanrong.mybatis.bean.Employee databaseId = 'oracle'>
select * from employee where id=#{id}
</select>
如果當前鏈接的是mysql數據庫,則加載sql語句時加載不帶databaseId屬性的和帶databaseId=’mysql’屬性的語句
八、 mappers 將sql映射註冊到全局配置中
<mappers>
<!--
mapper:註冊一個sql映射
註冊配置文件
resource:引用類路徑下的sql映射文件
mybatis/mapper/EmployeeMapper.xml
url:引用網路路徑或者磁盤路徑下的sql映射文件
file:///var/mappers/AuthorMapper.xml
註冊接口
class:引用(註冊)接口,
1、有sql映射文件,映射文件名必須和接口同名,並且放在與接口同一目錄下;
2、沒有sql映射文件,所有的sql都是利用註解寫在接口上;
public interface EmployeeMapperAnnotation {
@Select("select * from tbl_employee where id=#{id}")
public Employee getEmpById(Integer id);
}
@Test
public void test02() throws IOException{
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
try{
EmployeeMapperAnnotation mapper = openSession.getMapper(EmployeeMapperAnnotation.class);
Employee empById = mapper.getEmpById(1);
System.out.println(empById);
}finally{
openSession.close();
}
}
推薦:
比較重要的,複雜的Dao接口我們來寫sql映射文件
不重要,簡單的Dao接口爲了開發快速可以使用註解;
-->
<!-- <mapper resource="mybatis/mapper/EmployeeMapper.xml"/> -->
<!-- <mapper class="com.atguigu.mybatis.dao.EmployeeMapperAnnotation"/> -->
<!-- 批量註冊: -->
<package name="com.atguigu.mybatis.dao"/>
</mappers>
九 注意在配置文件裏這些標籤在書寫的時候有先後順序,不然會報錯,順序如下
Content Model : (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,
objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)