Mybatis核心配置文件
Mybatis核心配置文件
Mybatis的配置文件包含如下配置:

properties
当配置了这个属性,就可以动态替换如下部分。

配置方式:
1. 使用外部java属性文件配置
创建java属性文件——db.properties。
driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
username = root
password = 1234
在mybatis-config.xml中引入这个属性文件。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--引入外部配置文件 -->
<properties resource="db.properties"/>
<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>
<!-- 注册UserMapper.xml -->
<mappers>
<mapper resource="cn/gbl/dao/UserMapper.xml"/>
</mappers>
</configuration>
2. 在properties的子元素property 中配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 在properties的子元素property中配置-->
<properties>
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</properties>
<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>
<!-- 注册UserMapper.xml -->
<mappers>
<mapper resource="cn/gbl/dao/UserMapper.xml"/>
</mappers>
</configuration>
3. 也可以在 SqlSessionFactoryBuilder.build() 方法中传入属性值(了解即可)
注意: 这三种方式如果同时存在,会有一定的优先级问题
- 首先,读取在 properties 元素体中指定的属性;
- 其次,读取在 外部的java属性文件,且会覆盖已经指定了的重复属性;
- 最后,读取作为方法参数传递的属性,且会覆盖已经从 properties 元素体和 java外部属性文件加载了的重复属性。
Settings
官网中给出了很多设置,这里只介绍个别。
| 设置名 | 描述 | 有效值 | 默认值 |
|---|---|---|---|
| logImpl | 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 | SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING (这些都是日志的具体实现) | 未设置 |
| cacheEnabled | 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 | true | false | true |
| lazyLoadingEnabled | 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 |
true | false | false |
使用mybatis实现日志输出:
1. STDOUT_LOGGING :标准日志输出
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
只需在mybatis-config.xml中配置如上settings即可。
2. LOG4J :
- 导包:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
- 创建log4j的配置文件:
log4j.rootLogger=debug,stdout,debug,info,warn,error
#console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= [%d{yyyy-MM-dd HH:mm:ss a}]:%p %l%m%n
#info log
log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.info.File=./src/com/hp/log/info.log
log4j.appender.info.Append=true
log4j.appender.info.Threshold=INFO
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
#debug log
log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.debug.File=./src/com/hp/log/debug.log
log4j.appender.debug.Append=true
log4j.appender.debug.Threshold=DEBUG
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
#warn log
log4j.logger.warn=warn
log4j.appender.warn=org.apache.log4j.DailyRollingFileAppender
log4j.appender.warn.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.warn.File=./src/com/hp/log/warn.log
log4j.appender.warn.Append=true
log4j.appender.warn.Threshold=WARN
log4j.appender.warn.layout=org.apache.log4j.PatternLayout
log4j.appender.warn.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
#error
log4j.logger.error=error
log4j.appender.error = org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.error.File = ./src/com/hp/log/error.log
log4j.appender.error.Append = true
log4j.appender.error.Threshold = ERROR
log4j.appender.error.layout = org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c >> Method: %l ]%n%p:%m%n
- 在mybatis-confog.xml中设置log4j
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
- 获取LogLger对象
static Logger logger = Logger.getLogger(UserDaoTest.class);
typeAliases
先看之前写的Mapper映射文件:

可以使用typeAliases来简化这个写法:
配置方式:
1. 在typeAliases的子元素typeAlias中配置
<typeAliases>
<typeAlias type="cn.gbl.pojo.User" alias="user"/>
</typeAliases>
这种方式可以给具体的每一个Bean起任意的别名。
2. 在typeAliases的子元素package中配置
<typeAliases>
<package name="cn.gbl.pojo"/>
</typeAliases>
使用这种方式的时候,这个包下的JavaBean会使用 Bean 的首字母小写来作为它的别名。
如果也想像方式1那样,给Bean起任意的别名可以通过给Bean加注解来实现。

当使用注解后这个类的别名就变成了“xxgbl”,不再是Bean的首字母小写了。
配置typeAliases之后就可以对映射文件进行如下替换:

environments

<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="..." value="..."/>
</transactionManager>
<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>
<environment id="test">
<transactionManager type="JDBC">
<property name="..." value="..."/>
</transactionManager>
<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:
通过此标签可以定义多种环境。
注意:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
transactionManager:
通过此标签可以配置事务管理器。
mybatis中有两种事务管理器:
-
JDBC
-
MANAGED
dataSource:
通过此标签可以配置数据源。
mybatis中有三种数据源:
- UNPOOLED
- POOLED
- JNDI
mappers
配置方式:
1. 使用相对于类路径的资源引用
<mappers>
<mapper resource="cn/gbl/dao/UserMapper.xml"/>
</mappers>
2. 使用映射器接口实现类的完全限定类名
<mappers>
<mapper class="cn.gbl.dao.UserMapper"/>
</mappers>
注意:要满足以下两点,不然会报错。
- 接口和它的Mapper配置文件必须同名。
- 接口和它的Mapper配置文件必须在同一个包下。
3. 将包内的映射器接口实现全部注册为映射器
<mappers>
<package name="cn.gbl.dao"/>
</mappers>
注意:要满足以下两点,不然会报错。
- 接口和它的Mapper配置文件必须同名。
- 接口和它的Mapper配置文件必须在同一个包下。

浙公网安备 33010602011771号