MyBatis的xml配置

配置Configuration

在MyBatis中,配置文件的顶层结构如下

  • Configuration
    • properties
    • settings
    • typeAliases
    • typeHandlers
    • objectFactory
    • plugins
    • environments
      • environment
        • dataSource
        • transactionManager
    • databaseIdProvider
    • mappers

属性properties

1
2
3
<properties resource="db.properties">
<property name="username" value="root"/>
</properties>

resource属性可以导入在外部properties配置文件中的属性到properties标签中

property标签可以定义一些属性

配置好的属性可以在该文件中使用${}来替换需要动态配置的属性值

1
2
3
4
5
6
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${userName}"/>
<property name="password" value="${password}"/>
</dataSource>

比如上方的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属性在配置了类型别名后,可以不需要写全限定名,可以写在这里起的别名

  1. 在此包下的所有类都被默认起别名为类名开头小写,该默认值被注解@Alias()覆盖
1
2
3
<typeAliases>
<package name="com.lizhi.pojo"/>
</typeAliases>
  1. 可以单独为一个类起别名,
1
2
3
<typeAliases>
<typeAlias type="com.lizhi.pojo.Teacher" alias="teacher"/>
</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
2
3
4
5
6
7
8
9
10
11
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${userName}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>

注意一些关键点

  • 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 – 在任意时间可存在的活动(正在使用)连接数量,默认值:10
  • poolMaximumIdleConnections – 任意时间可能存在的空闲连接数。
  • poolTimeToWait – 这是一个底层设置,如果获取连接花费了相当长的时间,连接池会打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直失败且不打印日志),默认值:20000 毫秒(即 20 秒)。
JNDI(用得少,略)
给作者买杯咖啡吧~~~