properties
可以用来设置属性1
2
3
4<properties resource="org/mybatis/example/config.properties">
<property name="username" value="dev_user"/>
<property name="password" value="F2Fa3!33TYyg"/>
</properties>
然后就可以使用配置的属性啦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>
当然properties也可以由java代码来配置1
2//传入MyBatis配置文件和属性配置文件
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);
如果三者混合使用会出现什么情况呢?
这里引用MyBatis官方的解释
- 在 properties 元素体内指定的属性首先被读取。
- 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
- 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。
简单的说就是java代码>外部配置>内部配置
从MyBatis3.4.2开始可以为占位符指定默认值了,附上官方案例:1
2
3
4<dataSource type="POOLED">
<!-- 当username不存在时,值就会使用ut_user代替 -->
<property name="username" value="${username:ut_user}"/>
</dataSource>
不过该特性默认情况下是关闭的需手动开启:1
2
3<properties resource="org/mybatis/example/config.properties">
<property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/> <!-- Enable this feature -->
</properties>
settings
该属性比较多,在这里就不详述了,有需要的可以看官方文档:
http://www.mybatis.org/mybatis-3/zh/configuration.html#settings
typeAliases
该属性用于给类设置别名
例:1
2
3
4
5
6
7
8<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>
当需要使用某个类时就不需要写包名+类名啦,直接使用别名就可以了
还可以指定包名,这样MyBatis就会扫描该包下的所有类,若没加注解标识则默认别名为类名小写1
2
3<typeAliases>
<package name="domain.blog"/>
</typeAliases>
若有注解,则别名为注解所设定的值1
2
3
4("Author")
public class Author {
...
}
对于typeHandlers、objectFactory、plugins这三个标签我们以后再分析
environments(配置环境)
environment
在MyBatis中允许配置多个环境
例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24<environments default="aaa">
<environment id="aaa">
<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="bbb">
<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>
environments中设置default代表默认选择的环境,如果要默认选择bbb把default改成bbb就好了
在MyBatis中一个SqlSessionFactory只能与一个环境所绑定
如果不希望MyBatis绑定默认环境可以使用1
2//传入参数为MyBatis配置和环境id 注:environment为String类型
SqlSessionFactoryBuilder().build(reader, environment);
transactionManager(事物管理器)
MyBatis有两种事物管理器,也就是说transactionManager的type值不能随意写,它只有两个值那就是type=”[JDBC|MANAGED]”
官方解释:
- JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
- MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。例如:
1
2
3<transactionManager type="MANAGED">
<property name="closeConnection" value="false"/>
</transactionManager>
一般情况下type值都是JDBC
注: 如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。
dataSource(数据源)
type同样是一个枚举值,它的值可以为UNPOOLED、POOLED、JNDI,默认情况下写POOLED就好了
关于三个枚举值的含义大家可以去官网查看,由于太长了在这里就不贴出来了。
mappers(映射器)
在MyBatis中配置映射有四种方式:1
2
3
4
5
6<!-- 使用相对于类路径的资源引用 -->
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
1 | <!-- 使用完全限定资源定位符(URL) --> |
1 | <!-- 使用映射器接口实现类的完全限定类名 --> |
1 | <!-- 将包内的映射器接口实现全部注册为映射器 --> |