mybatis02--xml配置文件

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
@Alias("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
2
3
4
5
6
<!-- 使用完全限定资源定位符(URL) -->
<mappers>
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
<mapper url="file:///var/mappers/BlogMapper.xml"/>
<mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
1
2
3
4
5
6
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
<mapper class="org.mybatis.builder.BlogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
1
2
3
4
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
<package name="org.mybatis.builder"/>
</mappers>