MyBatis - Configuration(下)

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: MyBatis - Configuration(下)

6、plugins 插件

1)配置示例

<plugins> 
    <plugin interceptor="org.mybatis.example.ExamplePlugin"> 
        <property name="someProperty" value="100"/> 
    </plugin> 
</plugins>

2)用途

插件可以改变某些类的执行, MyBatis允许被插件来拦截的类有:

Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) 
ParameterHandler (getParameterObject, setParameters) 
ResultSetHandler (handleResultSets, handleOutputParameters) 
StatementHandler (prepare, parameterize, batch, update, query)


3)注意事项

插件可以改变MyBatis底层的行为,因此功能非常强大。但在对MyBatis深入理解前不要急着编写自己的插件,因为若插件编写不当,将导致整个MyBatis都不能正常工作。本系列的后面会有专门的章节介绍插件机制以及两个有用的插件,欢迎持续关注。

7、environments 环境

environments里可以配置多个environment,每个environment对应一个数据库环境。一个完整的定义如下:

<environments default="development"> 
    <environment id="development"> 
        <transactionManager type="JDBC"></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属性表示默认的数据库环境,与某个environment的id相对应。

environment 环境变量

environment通过id属性与其他数据库环境区别。它有两个子节点:

a)transactionManager事务管理器

在MyBatis中有两种事务管理器类型(也就是type=”[JDBC|MANAGED]”):

l JDBC:这个配置直接简单使用了JDBC的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。

l MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期(比如Spring或JEE应用服务器的上下文)。

b)dataSource数据源

在MyBatis中有三种数据源类型(也就是type=”[UNPOOLED | POOLED| JNDI]”):

l UNPOOLED:这个数据源的实现是每次被请求时简单打开和关闭连接,需要配置的属性:

driver:这是JDBC驱动的Java类的完全限定名

url:这是数据库的JDBC URL地址。

username:登录数据库的用户名。

password:登录数据库的密码。

defaultTransactionIsolationLevel:默认的连接事务隔离级别。

l POOLED:mybatis实现的简单的数据库连接池类型,它使得数据库连接可被复用,不必在每次请求时都去创建一个物理的连接。

l JNDI:通过jndi从tomcat之类的容器里获取数据源。

8、mapper 映射器

1)配置示例

<mappers> 
    <mapper resource="org/mybatis/builder/AuthorMapper.xml"/> 
    <mapper resource="org/mybatis/builder/BlogMapper.xml"/> 
    <mapper resource="org/mybatis/builder/PostMapper.xml"/> 
</mappers>

2)用途

Mappers用于告诉Mybatis去哪里寻找sql映射文件。sql映射文件是Mybatis最灵活的地方。sql映射文件在后续的章节里会进一步详细描述,欢迎持续关注。

二、Configuration 属性讲解(二)

前面介绍了Configuration的各个属性以及在文件里配置他们的方法。这一节介绍如何从文件里解析这些配置项以及简化配置的方法。Configuration在SqlSessionFactoryBuilder创建SqlSessionFactory时创建,通过XMLConfigBuilder的parse方法创建。下面一个个的介绍:

1、properties 属性

通过XMLConfigBuilder的propertiesElement方法解析,解析后的结果存放在Configuration的variables变量里。解析顺序,先解析子节点里的属性值,再解析resource属性指定的配置文件里的值。后者会覆盖前者的值。

2、settings 设置

通过XMLConfigBuilder的settingsElement方法解析,解析前校验属性是否是可配置的,只要有一个不可配置,整个mybatis就会异常退出,所以配置这些属性务必小心。

3、typeAliases 类型命名

通过XMLConfigBuilder的typeAliasesElement方法解析,在该方法内部调用TypeAliasRegistry的registerAlias方法完成注册,并将注册的别名存入本地缓存中。XMLConfigBuilder调用的registerAlias方法并没有什么特别的地方,但TypeAliasRegistry却提供了批量注册别名的方法,该方法只需要一个包名参数。该方法会在指定的包路径下扫描可注册的类(接口和内部类除外),并以类的简单名为key完整名为value注册别名。这个方法极大的简化了配置,后续章节将要介绍的spring与mybatis的整合模块里就使用了这个方法使得配置量大大减少。

4、typeHandlers 类型处理器

通过XMLConfigBuilder的typeHandlerElement方法解析,在该方法内部调用TypeHandlerRegistry的register方法完成注册,并将注册的类型处理器存入本地缓存中。同typeAliases一样,TypeHandlerRegistry也提供了批量注册的方法,该方法同样只需要一个包名参数。该方法会在指定的包路径下扫描可注册的类(接口、抽象类和内部类除外),不过只注册那些配置了MappedTypes注解的类。这个方法极大的简化了配置,后续章节将要介绍的spring与mybatis的整合模块里就使用了这个方法使得配置量大大减少。

5、objectFactory 对象工厂

略(不常用)

6、plugins 插件

通过XMLConfigBuilder的pluginElement方法解析,在该方法内部实例化插件对象后存入Configuration的interceptorChain变量里。

7、environments 环境

通过XMLConfigBuilder的environmentsElement方法解析,在该方法内,先判断默认是否指定了环境ID,没有的话就使用默认的环境ID吗,然后在各个环境里取ID对应的项。也就是说一个Configuration只会保存一个数据库环境,如果要配置多数据库环境的话需要创建多个Configuration对象。在改方法内先解析事务工厂、再解析数据源、然后再解析数据库环境,在解析数据库环境的过程中会访问一次数据库,以取得数据库类型信息。

8、mapper 映射器

通过XMLConfigBuilder的mapperElement方法解析,在该方法内部通过调用XMLMapperBuilder的parse方法完成。mapper的解析是mybatis的核心功能,涉及的流程较复杂,在下一章将专门分析,敬请期待。

目录
相关文章
|
3月前
|
SQL Java 数据库连接
Mybatis系列之 Error parsing SQL Mapper Configuration. Could not find resource com/zyz/mybatis/mapper/
文章讲述了在使用Mybatis时遇到的资源文件找不到的问题,并提供了通过修改Maven配置来解决资源文件编译到target目录下的方法。
Mybatis系列之 Error parsing SQL Mapper Configuration. Could not find resource com/zyz/mybatis/mapper/
|
6月前
|
Java 数据库连接 mybatis
结构性模式之---外观模式、MyBatis中Configuration的外观模式的使用分析
结构性模式之---外观模式、MyBatis中Configuration的外观模式的使用分析
|
12月前
mybatis-plus使用代码配置configuration
mybatis-plus使用代码配置configuration
285 0
|
SQL XML Java
MyBatis启动流程与Configuration配置体系
MyBatis启动流程 大致的过程如下: 加载配置XML文件 读取mybatis的dtd描述文件,并且解析xml标签 通过读取的XML配置信息生成对应的全局配置对象,以及生成需要mapper的SQL映射。 创建 SqlSessionFactory 完成之后,使用 SqlSessionFactory 创建 Session。 Congfiguration:是Mybatis初始化过程的核心对象,mybatis中几乎全部的配置信息会保存到Configuration中,全局生效。 XMLConfigBuilder:用于创建Configuration,解析MyBatis配置文件中 configura
55 0
|
SQL Oracle Java
MyBatis 核心配置综述之 Configuration详解
爱情不是你想买,想买就能买; MyBatis 不是你想起,想起就能起…… 我承认我唱歌只有一个调。 今儿心情还不错,吐了个槽,还希望大家不要介意。 话说,我最近一直在研究 MyBatis ,研究 MyBatis ,必然逃不了研究 Configuration对象,这个对象简直是太重要了,它是 MyBatis 起步的核心环境配置,下面我们来一起看一下 Configuration 类。
MyBatis 核心配置综述之 Configuration详解
|
XML Java 数据库连接
使用Mybatis时mybatis-config.xml配置中报错“configuration“ 的内容必须匹配 (...)的解决方案
使用Mybatis时mybatis-config.xml配置中报错“configuration“ 的内容必须匹配 (...)的解决方案
127 0
|
SQL Java 数据库连接
Mybatis:Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource
Mybatis:Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource
|
XML SQL druid
Data Access 之 MyBatis(二) - Configuration XML
Data Access 之 MyBatis(二) - Configuration XML
Data Access 之 MyBatis(二) - Configuration XML
|
SQL 存储 XML
mybatis configuration 核心构建流程
mybatis configuration 核心构建流程
162 0
|
XML Java 数据库连接
MyBatis - Configuration(上)
MyBatis - Configuration(上)
111 0
 MyBatis - Configuration(上)