MyBatis核心配置文件
背景
MyBatis是Apache基金会下的一个持久层框架,并且也是市场中主流的持久层框架,相比较于其他的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs
(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。使用MyBatis我们只需要去更改xml配置文件就可以去改变sql语句,不需要去更改java代码,这是毋庸置疑支持开闭原则
的。
- Maven仓库依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
其他版本依赖链接:Maven Repository: org.mybatis » mybatis (mvnrepository.com)
配置文件
使用MyBatis需要有两个xml配置文件,第一个是核心配置文件mybatis-config.xml
对于文件名来说,不需要做硬性规定,之后在Spring的配置中可以修改,不一定就是这个配置文件;第二个是mapping映射配置文件,但是它并不是单独一个文件就可以起作用的,它需要和Java接口共同组成映射器
:
映射器由 Java 接口和 XML 文件(或注解)共同组成,它的作用如下:
- 定义参数类型
- 配置缓存
- 提供 SQL 语句和动态 SQL
- 定义查询结果和 POJO 的映射关系
映射器的xml配置文件也不是一定需要,在之后我们可以使用MyBatis的注解实现xml配置中的功能,从而省略xml的配置时间。
mybatis-config.xml核心配置文件
一般来说,mybatis-config.xml需要有以下的内容
<?xml version="1.0" encoding="utf-8"?>
<!--引入mybatis官方提供的dtd约束文件,确保xml能够按照mybatis的约束生效-->
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--配置MyBatis的环境和全局JDBC信息-->
<configuration>
<!-- 属性:定义配置外在化 -->
<properties></properties>
<!-- 设置:定义mybatis的一些全局性设置 -->
<settings>
<!-- 具体的参数名和参数值 -->
<setting name="" value=""/>
</settings>
<!-- 类型名称:为一些类定义别名 -->
<typeAliases></typeAliases>
<!-- 类型处理器:定义Java类型与数据库中的数据类型之间的转换关系 -->
<typeHandlers></typeHandlers>
<!-- 对象工厂 -->
<objectFactory type=""></objectFactory>
<!-- 插件:mybatis的插件,插件可以修改mybatis的内部运行规则 -->
<plugins>
<plugin interceptor=""></plugin>
</plugins>
<!-- 环境:配置mybatis的环境 -->
<environments default="">
<!-- 环境变量:可以配置多个环境变量,比如使用多数据源时,就需要配置多个环境变量 -->
<environment id="">
<!-- 事务管理器 -->
<transactionManager type=""></transactionManager>
<!-- 数据源 -->
<dataSource type=""></dataSource>
</environment>
</environments>
<!-- 数据库厂商标识 -->
<databaseIdProvider type=""></databaseIdProvider>
<!-- 映射器:指定映射文件或者映射类 -->
<mappers></mappers>
</configuration>
除去xml头部配置之外,mybatis-config.xml文件只有configuration一个顶层标签项,之后还会在configuration标签中写入很多信息。
以下是MyBatis官方给出的字段参考文档:
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:
- configuration(配置)–顶层配置
configuration是MyBatis的xml配置文件顶层标签(根标签,根元素),其他的标签配置都需要写在configuration标签中才能生效。
- properties(属性)
看到这个标签值我们可以很容易想到,**.properties
这种格式的配置文件,一般来说,在之前的学习里都是用来配置JDBC链接的"四件套":驱动(driver)、资源定位(url)、连接账户(username)、连接密码(password);在这里我们同样可以使用这种配置。
我们可以在maven的项目骨架中的resources文件夹下创建db.properties
文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mybatis
username=root
Password=root
然后在mybatis-config.xml文件下使用properties标签来连接文件
<!--属性标签链接properties文件-->
<properties resource="db.properties"/>
链接完后就可以在environments标签下的子标签dataSource 中使用其中的元素了
<environments default="development">
<environment id="mysql_environment">
<transactionManager type=""></transactionManager>
<dataSource type="mysql_test">
<!--property对应的是properties文件中的一行数据,其中的value取出properties文件中的对应的值-->
<!--至于${***}表示取出properties文件中对应key的值(properties文件格式使用”key=value“形式的键值对存储),这种功能xml识别不了,一般由第三方的jar包实现,也就是MyBatis自身识别-->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
- settings(设置)
setting是指定MyBatis的一些全局配置属性,这是MyBatis中极为重要的调整设置,它们会改变MyBatis的运行时行为,settings中的元素过多,只会记住其中重要的就可以,其余的在有需要的时候查询,更何况settings中的值是有默认属性的:
设置参数 | 描述 | 有效值 | 默认值 |
---|---|---|---|
cacheEnabled | 该配置影响的所有映射器中配置的缓存的全局开关 | true | false | true |
lazyLoadingEnabled | 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态 | true | false | false |
aggressiveLazyLoading | 当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性将会按需加载。 | true | false | true |
multipleResultSetsEnabled | 是否允许单一语句返回多结果集(需要兼容驱动)。 | true | false | true |
useColumnLabel | 使用列标签代替列名。不同的驱动在这方面会有不同的表现, 具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果。 | true | false | true |
useGeneratedKeys | 允许 JDBC 支持自动生成主键,需要驱动兼容。 如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby)。 | true | false | False |
autoMappingBehavior | 指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示取消自动映射;PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。 FULL 会自动映射任意复杂的结果集(无论是否嵌套)。 | NONE, PARTIAL, FULL | PARTIAL |
defaultExecutorType | 配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements); BATCH 执行器将重用语句并执行批量更新。 | SIMPLE REUSE BATCH | SIMPLE |
defaultStatementTimeout | 设置超时时间,它决定驱动等待数据库响应的秒数。 | Any positive integer | Not Set (null) |
defaultFetchSize | Sets the driver a hint as to control fetching size for return results. This parameter value can be override by a query setting. | Any positive integer | Not Set (null) |
safeRowBoundsEnabled | 允许在嵌套语句中使用分页(RowBounds)。 | true | false | False |
mapUnderscoreToCamelCase | 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。 | true | false | False< |