配置Configuration
在MyBatis中,配置文件的顶层结构如下
- Configuration
- properties
- settings
- typeAliases
- typeHandlers
- objectFactory
- plugins
- environments
- environment
- dataSource
- transactionManager
- environment
- databaseIdProvider
- mappers
属性properties
1 | <properties resource="db.properties"> |
resource属性可以导入在外部properties配置文件中的属性到properties标签中
property标签可以定义一些属性
配置好的属性可以在该文件中使用${}来替换需要动态配置的属性值
1 | <dataSource type="POOLED"> |
比如上方的driver的值会由db.properties文件中对应的值来替换
如果在多个地方进行了配置Java代码,外部文件,properties标签,则按照以下顺序加载
- 先加载properties标签中的属性
- 再加载外部文件中配置的属性,如果有重复的属性,则覆盖旧的属性
- 最后加载Java代码中的属性,如果有重复的属性,覆盖旧的属性
因此,通过java方法传入的属性具有最高的优先级,外部文件优先级次之,properties标签中的属性优先级最为低
设置settings
以下为重要的几个配置,需要掌握
设置名 | 描述 | 有效值 | 默认值 |
---|---|---|---|
cacheEnabled | 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 | true | false | true |
lazyLoadingEnabled | 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 |
true | false | false |
useGeneratedKeys | 允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。 | true | false | False |
mapUnderscoreToCamelCase | 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。 | true | false | False |
logImpl | 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 | SLF4J | LOG4J(deprecated since 3.5.9) | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING | 未设置 |
类型别名typeAliases
在映射器XML文件中,resultType属性在配置了类型别名后,可以不需要写全限定名,可以写在这里起的别名
- 在此包下的所有类都被默认起别名为类名开头小写,该默认值被注解@Alias()覆盖
1 | <typeAliases> |
- 可以单独为一个类起别名,
1 | <typeAliases> |
下面为一些常见的java类型内建的类型别名
别名 | 映射的类型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
map | Map |
环境配置Environments
mybatis可以配置多套环境,这种机制有利于将SQL映射应用于多种数据库之中。开发,测试,生成环境需要有不同的配置。
1 | <environments default="development"> |
注意一些关键点
- environment的id属性,该属性是唯一性标识环境的值
- 在environments的default属性中通过id指定环境配置
事务管理器transactionManager
type指定事务管理器
mybatis中有两种事务管理器(也就是type = “JDBC|MANAGED”)
- JDBC-这个配置直接使用了JDBC的提交和回滚机制,依赖于数据源的连接来管理事务管理作用域
- MANAGED-这个配置几乎什么都不做,一般不选用
如果使用mybatis+Spring 则没有必要配置事务管理器,因为Spring模块会使用自带的事务管理器来覆盖此配置
数据源dataSource
type指定数据源类型
dataSource元素使用标准的JDBC数据源接口来配置JDBC连接对象的资源
有三种内置的数据源格式
UNPOOLED
这个数据源的实现每次连接会打开和关闭连接会有点慢,但是对于一些小型应用已经足够了,
此类型的数据源只需要配置以下几种属性
driver
– 这是 JDBC 驱动的 Java 类全限定名(并不是 JDBC 驱动中可能包含的数据源类)。url
– 这是数据库的 JDBC URL 地址。username
– 登录数据库的用户名。password
– 登录数据库的密码。defaultTransactionIsolationLevel
– 默认的连接事务隔离级别。defaultNetworkTimeout
– 等待数据库操作完成的默认网络超时时间(单位:毫秒)
POOLED
这个数据源的实现利用了池的概念将JDBC的连接对象组织起来,避免了创建新的连接实例的时候所必需的初始化和认证时间,可以使web应用响应速度变快,该类型的数据源除了以上UNPOOLED的属性外还有以下常用配置
poolMaximumActiveConnections
– 在任意时间可存在的活动(正在使用)连接数量,默认值:10poolMaximumIdleConnections
– 任意时间可能存在的空闲连接数。poolTimeToWait
– 这是一个底层设置,如果获取连接花费了相当长的时间,连接池会打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直失败且不打印日志),默认值:20000 毫秒(即 20 秒)。