MyBatis全局配置文件详解
目录
- MyBatis全局配置文件
- settings 设置
- typeAliases 类型命名
- 存在的问题:
- @Alias("")
- environments 环境
- transactionManager 事务管理器
- JDBC:JdbcTransactionFactory
- databaseIdProvider 数据库厂商标识
- DB_VENDOR
- 变短
- sql映射文件
- 总结
MyBatis全局配置文件 MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(
settings
)和属性(properties
)信息。文档的顶层结构如下:
configuration
配置properties
属性settings
设置typeAliases
类型命名typeHandlers
类型处理器objectFactory
对象工厂plugins
插件environments
环境environment
环境变量transactionManager
事务管理器dataSource
数据源databaseIdProvide
r 数据库厂商标识mappers
映射器
mybatis
可以使用properties来引入外部properties配置文件的内容resource
:引入类路径下的资源url:引入网络路径或者磁盘路径下的资源
如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:
- 在 properties 元素体内指定的属性首先被读取。
- 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。 – 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。
settings 设置
这是 MyBatis 中极为重要的调整设置,它们会改变MyBatis 的运行时行为。
setting包含很多重要的设置项
setting
:用来设置每一个设置项name
:设置项名value
:设置项的取值mapUnderscoreToCamelCase
:驼峰命名 last_name -> lastName
文章图片
typeAliases 类型命名
typeAliases
:可以批量设置别名这个包下的每一个类别名不区分大小写
创建一个默认的别名,就是简单类名小写
typeAlias
:为某个java类型起别名type
:指定要起别名的类型全类名;
默认别名就是类名小写:employeealias
:指定新的别名文章图片
package
:为某个包下的所有类批量起别名name
:指定包名(为当前包下以及下面所有的后代包的每一个类都起一个默认的别名(类名小写))文章图片
存在的问题:
假设bean包下有一个类Employee,同时在bean包下有一个子包也有一个类叫Employee,此时这两个包的类名就会冲突,因此还可以使用注解的放上为类创建别名
@Alias("")
public class Employee{}
文章图片
值得注意的是,MyBatis已经为许多常见的 Java 类型内建了相应的类型别名。它们都是大小写不敏感的,我们在起别名的时候千万不要占用已有的别名。
文章图片
environments 环境 mybatis可以配置多种环境 default指定使用某种环境,可以达到快速切换
environments
:配置一个具体的环境信息;
必须有两个标签,id代表当前环境的唯一标识transactionManager 事务管理器
type
:事务管理器的类型 [JDBC(使用了 JDBC 的提交和回滚设置,依赖于从数据源得到的连接来管理事务范围。)|MANAGED
(不提交或回滚一个连接、让容器来管理事务的整个生命周期(比如 JEE应用服务器的上下文))]JDBC:JdbcTransactionFactory 自定义事务管理器 实现TransactionFactory接口即可
dataSource 数据源
type
:数据源的类型 [UNPOOLED
(不使用连接池)|POOLED
(使用连接池)|JNDI
(在EJB 或应用服务器这类容器中查找指定的数据源)]自定义数据源 实现DataSourceFactory接口
实际开发中我们使用Spring管理数据源,并进行事务控制的配置来覆盖上述配置
文章图片
databaseIdProvider 数据库厂商标识 databaseIdProvider: 可以根据不同的数据库厂商执行不同的语句。
type
:数据库类型 DB_VENDOR
作用就是得到数据库厂商标识(驱动自带的),mybatis就能根据数据库厂商标识来执行不同的sql
MYSQL Oracle SQL Server
value:为标识起一个别名,方便SQL语句使用databaseId属性引用
文章图片
文章图片
DB_VENDOR
会通过 DatabaseMetaData#getDatabaseProductName() 返回的字符串进行设置。由于通常情况下这个字符串都非常长而且相同产品的不同版本会返回不同的值,所以最好通过设置属性别名来使其
变短 MyBatis匹配规则如下:
- 如果没有配置databaseIdProvider标签,那么databaseId=null
- 如果配置了databaseIdProvider标签,使用标签配置的name去匹配数据库信息,匹配上设置databaseId=配置指定的值,否则依旧为null
- 如果databaseId不为null,他只会找到配置databaseId的sql语句
- MyBatis 会加载不带 databaseId 属性和带有匹配当前数据库databaseId 属性的所有语句。如果同时找到带有 databaseId 和不带databaseId 的相同语句,则后者会被舍弃。
mapper:注册一个sql映射
注册配置文件
resource
:引用类路径下的sql映射文件url:用网路路径下的或者磁盘路径下的sql映射文件
注册接口
class:引应用接口
- 接口映射文件,映射文件名必须和接口同名,并且放在同一个目录下
- 没有sql映射文件,所有的sql利用注解写在接口上
推荐:比较重要和复杂额Dao接口写sql映射文件,不重要的简单的为了开发快速可以使用注解
文章图片
package:批量注册
【MyBatis全局配置文件详解】
文章图片
sql映射文件
namespace
:名称空间;
指定为接口的全类名id
:唯一标识resultType
:返回值类型#{id}
:从传递过来的参数中取出id值select * from tbl_employee where id = #{id}select * from tbl_employee where id = #{id}select * from tbl_employee where id = #{id}
总结 1、接口是编程
原生: Dao -----> DaoImpl
Mybatis: Mapper -----> xxMapper.xml
2、SqlSession代表和数据库的一次会话,用完必须关闭
3、SqlSession和connection一样,都是非线程安全的。每次使用都应该获取新的对象
4、mapper接口没有实现类,但是Mybatis会为这个接口生成一个代理对象(将接口和xml进行绑定)
EmployeeMapper empMapper
= SqlSession.getMapper(Employee.class)
;
5、两个重要的配置文件
mybatis的全局配置文件;包含数据库连接池信息,事务管理器信息,系统运行信息
sql映射文件:保存了每一个SQL语句的映射信息
将sql抽取出来
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- mybatisplus如何在xml的连表查询中使用queryWrapper
- mybatisplus|mybatisplus where QueryWrapper加括号嵌套查询方式
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- MyBatis|MyBatis Generator配置
- Mybatis|Mybatis Plus 分页插件
- Mybatis(一)
- 被mybatis-generator-gui-0.6.1报错坑到的那些事(二)
- 06|06 | 全局锁和表锁 (给表加个字段怎么有这么多阻碍((待评论)))