核心配置文件 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。
- mybatis-config.xml
- XML 配置文件中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)。
XML配置 | 名称 |
---|---|
configuration | 配置 |
properties | 属性 |
settings | 设置 |
typeAliases | 类型别名 |
typeHandlers | 类型处理器 |
objectFactory | 对象工厂 |
plugins | 插件 |
environments | 环境配置 |
environment | 环境变量 |
transactionManager | 事务管理器 |
dataSource | 数据源 |
databaseIdProvider | 数据库厂商标志 |
mappers | 映射器 |
配置详解 1. 属性(properties) 这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。
例如:
- 不引入配置文件形式:
- 编写一个配置文件mysql.properties:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=123456
- 在核心配置文件中引入外部配置文件后:
当然也可以不修改核心配置文件中的属性元素情况下去引用不同属性的外部配置文件:
- 外部配置文件:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=111111
- 核心配置文件:
【java开发|MyBatis-核心配置文件解析】这时登录mysql数据库密码则为“111111”
如果两个文件有同一个字段,优先使用外部配置文件的!
2. 环境变量(environment) MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中。
Mybatis默认的事务管理器就是 JDBC , 连接池 : POOLED
不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
例如:
同时连接两个数据库:
- 外部配置文件(mysql.properties):
driver1=com.mysql.jdbc.Driver
url1=jdbc:mysql://localhost:3306/mybatis01?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username1=root
password1=123456driver2=com.mysql.jdbc.Driver
url2=jdbc:mysql://localhost:3306/mybatis02?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username2=root
password2=111111
- 核心配置文件:
3. 类型别名(typeAliases)
- 类型别名是为 Java 类型设置一个短的名字。
- 存在的意义仅在于用来减少类完全限定名的冗余。
- 先对比一下不使用别名时的XML映射文件(UserMapper.xml):
id="getUserList" resultType="com.mybatis.vo.User">
select * from mybatis.user
这时我们定义返回值类型是需要写User类的全路径。
- 配置 typeAliases三种方式:
- 手动配置别名
- 通过扫描包(推荐使用该方式)
- 通过注解,在User类中定义
@Alias("user")
public class User {}
- 这是的XML映射文件则可以简化为:
id="getUserList" resultType="User">
select * from mybatis.user
注意:
如果实体类十分多,建议使用第二种方式,但是扫描包定义的别名只能相同于类名,如果想自己改别名就使用第一种方式。如果实体类十分多又需要自己改别名的时候则使用注解。
4. 设置(settings) 这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项的意图、默认值等。
具体设置参照官方文档XML配置-设置
这里我们需要掌握的是日志功能:
设置值 | 描述 | 有效值 | 默认值 |
---|---|---|---|
logImpl | 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 | SLF4J、 LOG4J 、 LOG4J2 、 JDK_LOGGING 、 COMMONS_LOGGING 、 STDOUT_LOGGING 、 NO_LOGGING | 未设置 |
- 我们首先测试mybatis实现的通过User表中查找所有用户列表:
public interface UserMapper {List getUserList();
}
XML映射文件:
id="getUserList" resultType="User">
select * from mybatis.user
测试类:
public class Test {
@org.junit.Test
public void getUserList() {
SqlSession sqlSession = MyBatisUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List userList = userMapper.getUserList();
for (User user : userList) {
System.out.println(user);
}sqlSession.close();
}
}
输出结果为:
文章图片
可以看出这就是输出一个普通的遍历集合后的结果。
- 现在我们在核心配置文件中加入:
>
name="logImpl" value="https://www.it610.com/article/LOG4J"/>
创建一个提供于log4j日志的外部配置文件(log4j.properties):
#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j.rootLogger=DEBUG,console,file#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/wwt.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n#日志输出级别
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
我们会发现现在的输出结果会变成:
文章图片
在输出结果的前后多出了测试运行过程的详细描述,这就是mybatis自带的日志功能。
5. 映射器(mappers) 既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了。 但是首先我们需要告诉 MyBatis 到哪里去找到这些语句。 Java 在自动查找这方面没有提供一个很好的方法,所以最佳的方式是告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等。
- 使用相对于类路径的资源引用
- 使用完全限定资源定位符(URL)
- 使用映射器接口实现类的完全限定类名
注意:
- 接口和他的Mapper配置文件必须同名!
- 接口和他的Mapper配置文件必须在同一个包下!
- 将包内的映射器接口实现全部注册为映射器
注意:
- 接口和他的Mapper配置文件必须同名!
- 接口和他的Mapper配置文件必须在同一个包下!
到这里,mybatis的核心配置文件就完成了!
推荐阅读
- 数据库|SQL行转列方式优化查询性能实践
- mysql|一文深入理解mysql
- 达梦数据库|DM8表空间备份恢复
- 数据技术|一文了解Gauss数据库(开发历程、OLTP&OLAP特点、行式&列式存储,及与Oracle和AWS对比)
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- 谈灾难恢复指标(RTO与RPO是什么鬼())
- RPO与RTO
- 数据库|效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)...