java开发|MyBatis-核心配置文件解析

核心配置文件 每个基于 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 类型设置一个短的名字。
  • 存在的意义仅在于用来减少类完全限定名的冗余。
有三种方式配置typeAliases(以com.mybatis.vo包下的实体类User为例):
  • 先对比一下不使用别名时的XML映射文件(UserMapper.xml):
id="getUserList" resultType="com.mybatis.vo.User"> select * from mybatis.user

这时我们定义返回值类型是需要写User类的全路径。
  • 配置 typeAliases三种方式:
  1. 手动配置别名

  1. 通过扫描包(推荐使用该方式)

  1. 通过注解,在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表中查找所有用户列表:
Mapper接口:
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(); } }

输出结果为:
java开发|MyBatis-核心配置文件解析
文章图片

可以看出这就是输出一个普通的遍历集合后的结果。
  • 现在我们在核心配置文件中加入:
> 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

我们会发现现在的输出结果会变成:
java开发|MyBatis-核心配置文件解析
文章图片

在输出结果的前后多出了测试运行过程的详细描述,这就是mybatis自带的日志功能。

5. 映射器(mappers) 既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了。 但是首先我们需要告诉 MyBatis 到哪里去找到这些语句。 Java 在自动查找这方面没有提供一个很好的方法,所以最佳的方式是告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等。
  1. 使用相对于类路径的资源引用

  1. 使用完全限定资源定位符(URL)

  1. 使用映射器接口实现类的完全限定类名

注意:
  • 接口和他的Mapper配置文件必须同名!
  • 接口和他的Mapper配置文件必须在同一个包下!
  1. 将包内的映射器接口实现全部注册为映射器

注意:
  • 接口和他的Mapper配置文件必须同名!
  • 接口和他的Mapper配置文件必须在同一个包下!


到这里,mybatis的核心配置文件就完成了!

    推荐阅读