MyBatis配置详解

Mapper的XML配置文件

apper 的 XML 配置文件包含一些设置和属性,用于增强 MyBatis 的动作。文档的深层次结果如下:

configuration
|--- properties
|--- settings
|--- typeAliases
|--- typeHandlers
|--- objectFactory
|--- plugins
|--- environments
|--- |--- environment
|--- |--- |--- transactionManager
|--- |--- |__ dataSource
|__ mappers  

属性(properties)

通过properties结点可以引入.properties文件,进而使用.properties文件中的值作为配置的值。经常用于替换数据源的配置,方便管理。如:

<dataSource type="POOLED">
    <property name="driver" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
</dataSource>

设置(settings)

这是 MyBatis 修改操作运行过程细节的重要的步骤。配置示例如下:

<settings>
    <!-- 打印 SQL 语句 -->
    <setting name="logImpl" value="STDOUT_LOGGING" />
    <!-- 使全局的映射器启用或禁用缓存。 -->
    <setting name="cacheEnabled" value="false"/>
    <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 -->
    <setting name="lazyLoadingEnabled" value="true"/>
    <!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载。 -->
    <setting name="aggressiveLazyLoading" value="true"/>
    <!-- 是否允许单条 SQL 返回多个数据集 (取决于驱动的兼容性) default:true -->
    <setting name="multipleResultSetsEnabled" value="true"/>
    <!-- 是否可以使用列的别名 (取决于驱动的兼容性) default:true -->
    <setting name="useColumnLabel" value="true"/>
    <!-- 允许 JDBC 生成主键。需要驱动器支持。如果设为了 true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。 default:false  -->
    <setting name="useGeneratedKeys" value="false"/>
    <!-- 指定 MyBatis 如何自动映射 数据基表的列 NONE:不映射 PARTIAL:部分 FULL:全部  -->
    <setting name="autoMappingBehavior" value="PARTIAL"/>
    <!-- 这是默认的执行类型 (SIMPLE: 简单; REUSE: 执行器可能重复使用prepared statements语句;BATCH: 执行器可以重复执行语句和批量更新) -->
    <setting name="defaultExecutorType" value="SIMPLE"/>
    <!-- 使用驼峰命名法转换字段。 -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
    <!-- 设置本地缓存范围 session:就会有数据的共享 statement:语句范围 (这样就不会有数据的共享 ) defalut:session -->
    <setting name="localCacheScope" value="SESSION"/>
    <!-- 设置 JDBC 类型为空时,某些驱动程序 要指定值, default:OTHER,插入空值时不需要指定类型 -->
    <setting name="jdbcTypeForNull" value="NULL"/>
</settings>

类型别名(typeAliases)

为Java类型取别名,省去长长的包名。配置示例如下:

<typeAliases>
    <typeAlias alias="User" type="com.zys.hello.mybatis.domain.User"/>
    <typeAlias alias="Order" type="com.zys.hello.mybatis.domain.Order"/>
</typeAliases>

类型句柄(typeHandlers)

当MyBatis 对 PreparedStatement 设置参数或者是从 ResultSet 获取结果时, 类型句柄被用将值转换为相匹配的 Java类型。MyBatis为基本的数据类型实现了默认的类型句柄。我们自己也可以实现句柄,只需要实现TypeHandler接口,然后加入到配置中。

对象工厂(objectFactory)

每次 MyBatis 为结果对象创建一个新实例, 都会用到 ObjectFactory。 默认的 ObjectFactory 与使用目标类的构造函数创建一个实例毫无区别, 如果有已经映射的参数, 那也可能使用带参数的构造函数。 如果需要重写 ObjectFactory 的默认操作,你可以创建一个类,继承DefaultObjectFactory类并重写相应方法即可。

插件(plugins)

MyBatis 允许你在映射语句执行过程中某点上拦截调用。默认的, MyBatis 允许插件拦截以下调用:

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

环境(environments)

MyBatis 可以配置多个环境。这可以帮助你 SQL 映射对应多种数据库等。

但是一个 SqlSessionFactory 实例对应一个数据库。

事务管理器

MyBatis 有两个事务管理类型:

  • JDBC - 这个类型直接全部使用 JDBC 的提交和回滚功能。它依靠使用连接的数据源来管理事务的作用域。
  • MANAGED - 这个类型什么不做, 它从不提交、 回滚和关闭连接。 而是让窗口来管理事务的全部生命周期。(比如说 Spring 或者 Java EE服务器。
数据源

数据源类型有三种: UNPOOLED, POOLED, JNDI。

UNPOOLED:数据源实现是在每次请求都打开和关闭一个连接。有以下几个属性:

  • driver - 指定 JDBC 驱动器的 Java类
  • url - 连接数据库实例的 URL 路径
  • username - 登录数据库的用户名
  • password - 登录数据库的密码
  • defaultTransactionsolationLevel - 指定连接的默认事务隔离级别

POOLED:数据源缓存 JDBC 连接对象用于避免每次都要连接和生成连接实例而需要的验证时间。对于并发 WEB 应用,这种方式非常流行,因为它有最快的响应时间。除了UNPOOLED涉及的属性,还有:

  • poolMaximumActiveConnections - 特定时间里可同时使用的连接数
  • poolMaximumIdleConnections - 特定时间里闲置的连接数
  • poolMaximumCheckoutTime - 在连接池强行返回前,一个连接可以进行‘检出’ 的总计时间
  • poolTimeToWait - 并重新尝试重新连接,免得长时间的等待。
  • poolPingQuery - Ping Query 是发送给数据库的 Ping 信息, 测试数据库连接是否良好和是否准备好了接受请求。 默认值是“NO PING QUERY SET”, 让大部分数据库都不使用 Ping, 返回一个友好的错误信息。
  • poolPingEnabled - 设置 PingQuery 是否可用。 如果可用, 你可以使用一个最简单的 SQL 语句测试一下。默认是: false
  • poolPingConnectionsNotUsedFor - 配置 poolPingQuery 多长时间可以用。通常匹配数据库连接的超时, 避免无谓的 ping。 默认: 0, 表示随时允许 ping, 当然, 必须在 poolPingEnabled 设为 true 的前提下。

JNDI:数据源实现是为了准备和 Spring 或应用服务一起使用,可以在外部也可以在内部配置这个数据源,然后在 JNDI 上下文中引用它。这个数据源配置只需要两项属性:

  • initial_context - 这个属性是被用于上下文从 InitialContext 中(比如:initialContext.lookup(initial_context))查找。这个属性是可选的,如果被省略, InitialContext 将会直接查找 data_source 属性。
  • data_source - 这是数据源实例能搜索到的上下文路径。它会直接查找 initial_context 搜索返回的值,如果 initial_context 没有值的话,直接使用 InitialContext 查找。

映射器(Mappers)

SQL语句映射文件,MyBatis 真正强大的地方,相比直接使用JDBC,不仅减少了大量代码,而且足够灵活。

我的更多文章尽在:我的个人博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值