官网文档地址:mybatis – MyBatis 3 | 配置
目录
4. typeHandlers 标签(类型处理器)、objectFactory 标签(对象工厂)
7. databaseIdProvider 标签(数据库厂商标识)
一、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>
<!-- 在此处编写配置 -->
</configuration>
二、<configuration> 中的配置
官方描述 :
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:
configuration(配置) properties(属性) settings(设置) typeAliases(类型别名) typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件) environments(环境配置) environment(环境变量) transactionManager(事务管理器) dataSource(数据源) databaseIdProvider(数据库厂商标识) mappers(映射器)- 因此我们需要按照上述的顺序进行配置
1. properties 标签 ( 属性)
这些属性可以在 外部进行配置 ,并可以进行动态替换。你既可以在典型的 Java属性文件 中配置这些属性,也可以在 properties 元素的子元素 中设置。
1)、设置 外部配置文件 :
<properties resource="jdbcConfig.properties"></properties>
2)、设置属性:
<properties resource="jdbcConfig.properties">
<property name="username" value="{{ 输入用户名 }}"/>
<property name="password" value="{{ 输入密码 }}"/>
</properties>
3)、也可以在 SqlSessionFactoryBuilder.build() 方法中传入属性值。例如:
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);
// 或者
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, props);
4)、使用设置好的属性:
<!-- username和 password 属性将会由 properties 元素中设置的相应值来替换 -->
<!-- driver 和 url 属性将会由 jdbcConfig.properties 文件中对应的值来替换 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
5)、如果 一个属性 在 不只一个地方进行了配置 ,那么,MyBatis 将按照下面的顺序来加载:
- 首先读取在 properties 元素体内指定的属性。
- 然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
- 最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
因此,通过 方法参数传递的属性具有最高优先级 ,resource/url 属性中指定的配置文件次之, 最低优先级的则是 properties 元素中指定的属性 。
6)、从 MyBatis 3.4.2 开始,你可以为 占位符指定一个默认值 。
如果属性 'username' 没有被配置,'username' 属性的值将为 'ut_user'
<property name="username" value="${username:ut_user}"/>
这个特性默认是关闭的 。要启用这个特性,需要添加一个特定的属性来开启这个特性。
<!-- 启用默认值特性 -->
<property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/>
如果你在 属性名中使用了 ":" 字符 (如:db:username
),或者 在 SQL 映射中使用了 OGNL 表达式的三元运算符 (如: ${tableName != null ? tableName : 'global_constants'}
)。
<!-- 修改默认值的分隔符 -->
<property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="?:"/>
<!-- 使用 -->
<property name="username" value="${db:username?:ut_user}"/>
2. settings 标签( 设置 )
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
请参考官方文档
3. typeAliases 标签 ( 别名 )
<!-- 针对别名定义
type:类型的路径
alias:别名
-->
<typeAliases>
<!-- 单独配置 -->
<typeAlias type="domain.User" alias="user"/>
<!-- 包配置 -->
<!-- 在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名 -->
<package name="domain"/>
</typeAliases>
// 注解
@Alias("user")
public class User { }
常见的 Java 类型内建的类型别名, 请参考官网文档
4. typeHandlers 标签(类型处理器)、objectFactory 标签(对象工厂)
请参考官网文档
5. plugins 标签(插件)
分页插件
官网 / github:MyBatis 分页插件 PageHelper | https://github.com/JSQLParser/JSqlParser
1)、添加依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>3.7.5</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>1.0</version>
</dependency>
2)、配置mybatis-config.xml
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 方言 -->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
3)、使用
@Test
public void page(){
// 设置分页相关参数, 当前页, 每页显示的条数
PageHelper.startPage(1,3);
List<User> users = userDao.findAll();
users.forEach(System.out::println);
PageInfo<User> pageInfo = new PageInfo<>(users);
// 当前页
pageInfo.getPageNum();
// 显示条数
pageInfo.getPageSize();
// 总数
pageInfo.getTotal();
// 总页数
pageInfo.getPages();
// 是否是第一页
pageInfo.isIsFirstPage();
// 是否有下一页
pageInfo.isHasNextPage();
}
6. environments 标签(环境配置)
<environments default="dev">
<!-- 配置数据源 -->
<environment id="dev">
<!-- 配置事务 -->
<transactionManager type="JDBC"></transactionManager>
<!--配置连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</dataSource>
</environment>
<environment id="prov">
...
</environment>
</environments>
1)、transactionManager:
<!-- 配置事务 -->
<transactionManager type="JDBC"></transactionManager>
JDBC – 这个配置直接使用了 JDBC 的提交和回滚功能、
MANAGED – 这个配置几乎没做什么。
2)、数据库连接池
<!-- 配置数据源(链接池) -->
<dataSource type="POOLED">
POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来
UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接。
JNDI – 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用
7. databaseIdProvider 标签(数据库厂商标识)
请参考官网文档
8. mappers 标签(映射器)
<mappers>
<!-- 使用相对于类路径的资源引用 -->
<mapper resource="dao/UserMapper.xml"/>
<!-- 使用完全限定资源定位符(URL) -->
<mapper url="file:///dao/UserMapper.xml"/>
<!-- 使用映射器接口实现类的完全限定类名 -->
<mapper class="dao.UserDao"/>
<!-- 将包内的映射器接口全部注册为映射器 -->
<package name="dao"/>
</mappers>