mybatis的配置文件里的配置标签
一、properties
二、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?)