MyBatis基础配置
最近学习MyBatis的框架,感觉MyBatis的官方教程对细节讲的很详细,但是有的地方不是很清楚,自己摸索了一下午的时间,才把配置做好。
主要配置文件的结构
- configuration配置
- properties属性
- settings设置
- typeAliases类型别名
- typeHandlers类型处理器
- objectFactory对象工厂
- plugins插件
- environments环境
- environment环境变量
- transactionManager事务管理器
- dataSource数据源
- databaseIdProvider 数据库厂商标识
- mappers 映射器
其中configuration是根元素,environments和mappers两个子元素必选,其他子元素可选。
文章只对properties,typeAliases,environments及mappers这几个子元素做讲解。
如果对其他子元素的配置感兴趣,请移步官方文档。
项目结构
因为配置文件以及代码中读取资源文件都会涉及到文件的路径,项目结构如下图所示:
我的MyBatis配置文件的命名是mybatis-config.xml,后面都沿用这个命名,也可以用其他命名,只需后面读取配置文件的时候更改成自己的文件命名就行。
properties属性
properties的作用就是配置属性以供之后的environments使用,properties有两种配置方式:
1.第一种方式是在典型的 Java 属性文件中配置,即外部配置
<properties resource="application.properties"/>
application.properties文件如下:
#MyBatis-config.xml
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/数据库名称
username=连接数据库的用户名称
password=连接数据库的用户密码
2.直接通过properties子元素property来传递
<properties>
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/数据库名称"/>
<property name="username" value="连接数据库的用户名称"/>
<property name="password" value="连接数据库的用户密码"/>
</properties>
3.两者结合使用
<properties resource="application.properties">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/数据库名称"/>
</properties>
总结:推荐使用第一种通过Java属性文件配置的方式,比较灵活,且当连接变化的时候,只需要修改application.properties文件。
typeAliases类型别名
类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。
typeAliases也有两种配置方式:
1.一个类的完全限定名对应一个类型别名
官方教程示例
<typeAliases>
<typeAlias alias="Author" type="domain.blog.Author"/>
<typeAlias alias="Blog" type="domain.blog.Blog"/>
<typeAlias alias="Comment" type="domain.blog.Comment"/>
<typeAlias alias="Post" type="domain.blog.Post"/>
<typeAlias alias="Section" type="domain.blog.Section"/>
<typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>
则在之后XML的映射配置文件中,若有任何用到domain.blog.Blog的地方,都可以直接使用Blog代替
2.在typeAliases中指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean
官方教程示例
<typeAliases>
<package name="domain.blog"/>
</typeAliases>
每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 domain.blog.Author 的别名为 author;若有注解,则别名为其注解值。看下面的例子:
@Alias("author")
public class Author {
...
}
domain.blog.Author的别名为author
总结:选择两种方式均可。另外MyBatis已经为常见的Java类型内建了相应的类型别名。详情查看官方文档。
environments
XML文件配置实例
<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>
关键点:
- 默认的环境 ID(比如:default=”development”)。
- 每个 environment 元素定义的环境 ID(比如:id=”development”)。
- 事务管理器的配置(比如:type=”JDBC”)。
- 数据源的配置(比如:type=”POOLED”)。
默认的环境和环境 ID 是一目了然的。随你怎么命名,只要保证默认环境要匹配其中一个环境ID。
对transactionManager的配置不作介绍,如果你使用的JDBC,直接type=”JDBC”就是了。。。
dataSource的type介绍也请自行查看官方教程
如果你没有特殊需求的话,dataSource中只需简单地配置四个属性:driver, url, username, password
使用${propertes中配置的属性名(name)}来引用之前在properties中配置的属性
mappers映射器
mappers映射器的配置请看我的另外一篇教程,映射器接口,Mapper XML文件及mappers的配置。