文章目录
- MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。
- 在配置文件中, 一定要保证配置信息的顺序, 不然就会报错, 如下图
属性(properties)
- 在MyBatis配置文件中,你可以使用properties标签在外部引入配置信息, 也可以在标签内通过property标签设置配置信息
- 新建config.properties文件写入配置信息, 然后使用properties标签获取配置信息
- 使用propetry标签设置配置信息
<properties >
<property name="username" value="root"/>
</properties>
- 设置好的属性可以在整个配置文件中用来替换需要动态配置的属性值。
<environment id="development3">
<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>
- 注意, 对应的名称一定要相同, 比如username就要对应username, 而且如果同时使用外部配置文件和property, 优先级是外部配置文件优先级更高
设置(settings)
- 这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项设置的含义、默认值等。
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
类型别名(typeAliases)
- 设置短的名字, 意义在于减少完全限定名, 代码更加整洁, 如果我们不设置别名, 那么我们在映射器文件中就必须使用全限定名, 如果我们设置了别名就可以使用我们的别名代替全限定名
- 设置方式
- 在配置文件中DIY设置
<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>
- 给定包自动扫描设置, 这种默认生成的别名是首字母小写的全名称比如domain.blog.Author生成的就是author
<typeAliases>
<package name="domain.blog"/>
</typeAliases>
- 通过注解DIY别名
@Alias("author")
public class Author {
...
}
环境配置(environments)
- MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中
- 不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
- 如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例
- environments 使用default绑定哪个id就是时间哪个环境
<environments default="development">
<environment id="development">
<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>
注意一些关键点
默认使用的环境 ID(比如:default=“development”)。
每个 environment 元素定义的环境 ID(比如:id=“development”)。
事务管理器的配置(比如:type=“JDBC”)。
数据源的配置(比如:type=“POOLED”)。
事务管理器(transactionManager)
- 事务管理器有俩种
- JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
- MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。所以很少用它
- 我们经常默认使用的就是JDBC
数据源(dataSource)
- dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
- 有三种内建的数据源类型
- UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接。虽然有点慢,但对那些数据库连接可用性要求不高的简单应用程序来说,是一个很好的选择。
- POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。
- JNDI – 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。
- 我们经常默认使用的就是POOLED
映射器说明(mappers)
- 使用mappers元素要绑定我们的映射器文件
- 最常用的就是使用相对于类路径的资源引用, 使用这个很自由, 直接绑定映射器
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
- 使用映射器接口实现类的完全限定类名, 使用这个必须保映射器.xml文件和接口实体类在同一个目录下而且必须是同名的
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
<mapper class="org.mybatis.builder.BlogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
- 将包内的映射器文件实现全部注册进来成为映射器, 使用这个要求和上述一样必须保映射器.xml文件和接口实体类在同一个目录下而且必须是同名的
<mappers>
<package name="org.mybatis.builder"/>
</mappers>