一. 引入外部属性文件_properties
像在Spring中,数据库连接的相关的配置都是在外部的properties文件中进行的,在MyBatis依然使用这种形式。
在类路径下添加db.properties:
### MYSQL
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://127.0.0.1:3306/ssm?characterEncoding=utf-8&useUnicode=true
mysql.user=root
mysql.password=a123456
mysql.maxSize=10
mysql.initSize=5
### ORACLE
oracle.driver=oracle.jdbc.driver.OracleDriver
oracle.url=jdbc:oracle:thin:@AUTOBVT-CKDOVBK:1521:wanbange
oracle.user=scott
oracle.password=a123456
然后在MyBatis的全局配置文件中,引入外部的属性文件:
<?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:表示从类路径中加载对应的属性文件
url:表示从网络中或者磁盘中读取对应的属性文件
-->
<properties resource="db.properties" ></properties>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}" />
<property name="url" value="${mysql.url}" />
<property name="username" value="${mysql.user}" />
<property name="password" value="${mysql.password}" />
</dataSource>
</environment>
</environments>
<!-- 注册sql映射文件 -->
<mappers>
<mapper resource="com/nhkj/dao/EmpDao.xml" />
</mappers>
</configuration>
测试引用外部属性文件是否成功.
二. 运行时的行为设置_setting
在MyBatis的全局配置文件中,可以使用setting标签设置MyBatis运行时的行为,有很多可以设置的项,今天我们讲解一些基本的设置,之前编写HelloWorld程序的时候,我们查询的数据列没有和实体类的JavaBean风格的属性名称对应,所以查询的结果封装不上,后面的解决方案是设置了自动驼峰命名,就是将查询结果集的数据列映射到实体类属性映射不上的情况下,对查询结果集的数据列自动的进行驼峰命名后再进行映射。这是查询结果集能够正常的封装到实体类对象的属性上。
<!--
settings:Mybatis运行时行为设置,可以配置多个
- setting :单个行为设置标签
- name :设置项名称
- value : 设置项的值
-->
<settings>
<!-- 设置自动驼峰命名 -->
<setting name="mapUnderscoreToCamelCase" value="true"></setting>
</settings>
三. 运行时环境
Environments表示配置多个环境,这里的环境指的是数据库环境,已就意味着我们的程序可以连接多个数据库。
<!--
environments:表示可以配置多个环境,default 属性表示指定使用哪一种环境、
- environment 表示配置单个数据库环境 ,必须存在id属性,表示的此环境的唯一标识,而且多个环境的id不能重复,存在两个标签
- transactionManager :配置事务管理器,type表示设置事务管理器的类型,有两种
- JDBC :这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域
- MANAGED :这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。
默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为
<property name="closeConnection" value="false"/>
- dataSource :配置数据源,type表示设置数据源类型,有三种:
- POOLED : 使用连接池
- UNPOOLED :不使用连接池
- JNDI :
-->
<environments default="oracle">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}" />
<property name="url" value="${mysql.url}" />
<property name="username" value="${mysql.user}" />
<property name="password" value="${mysql.password}" />
</dataSource>
</environment>
<environment id="oracle">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${oracle.driver}" />
<property name="url" value="${oracle.url}" />
<property name="username" value="${oracle.user}" />
<property name="password" value="${oracle.password}" />
</dataSource>
</environment>
</environments>
四. 注册映射文件_mappers
使用mappers标签可以注册sql映射文件,将sql映射文件注册到全局配置文件中是必不可少的步骤,正常开发来说,一个SQL映射文件对应到一个DAO[Mapper]接口。
<!-- 注册sql映射文件
mappers : 可以注册多个sql映射文件
mapper : 注册单个sql映射文件
- resource : 表示配置类路径中的sql映射文件
- url:表示配置网络中或者硬盘中的sql映射文件
- class : 表示引用接口注册,
- 要求,sql映射文件和接口要同名同包
- 也可以不适用sql映射文件,而是在接口的方法上注解sql,这种方式不提倡,因为MyBatis本来就是想将sql和Java代码相分离
@Select("select * from emp")
public List<Emp> selectEmp();
package : 扫描此包及子包的接口和sql映射文件
- 需要在接口中使用@Mapper注解
@Mapper
public interface EmpDao {
- 要求,sql映射文件和接口要同名同包
-->
<mappers>
<package name="com.nhkj.dao"/>
<!-- <mapper class="com.nhkj.dao.EmpDao"/> -->
</mappers>
小结
对于全局的配置文件,在Mybatis中是一个关键的配置,当然以后如果Mybatis和Spring的整合的话,可以不需要Mybatis的配置文件,但是依然建议保留。
MyBatis的全局配置文件必须按照顺序配置:
- properties
- settings
- typeAliases
- typeHandlers
- objectFactory
- objectWrapperFactory
- reflectorFactory
- plugins
- environments
- databaseIdProvider
- mappers
中间可以断,但顺序不能乱。