在 MyBatis 中有两种类型的事务管理器(也就是 type=”JDBC"或者"MANAGED”):
- JDBC:这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务范围 。
- MANAGED:这个配置几乎没做什么 。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如J2EE应用容器上下文) 。默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为 。如:注意:如果单独使用MyBatis而没有集成能管理事务的容器,那么配置成MANAGED就会等同于没有事务,所以一般单独使用MyBatis时,应配置为JDBC 。
dataSource元素使用标准的 JDBC 数据源接口来配置JDBC连接对象的资源 。有三种内建的数据源类型(也就是 type=”[UNPOOLED|POOLED|JNDI]”) 。
UNPOOLED
非连接池数据源 。UNPOOLED 类型的数据源仅仅需要配置以下 5 种属性:
- driver – 这是 JDBC 驱动的 Java 类的完全限定名(并不是JDBC驱动中可能包含的数据源类)
- url – 这是数据库的 JDBC URL 地址
- username – 登录数据库的用户名
- password – 登录数据库的密码
- defaultTransactionIsolationLevel – 默认的连接事务隔离级别
连接池数据源 。除了上述提到UNPOOLED下的属性外,会有更多属性用来配置 POOLED 的数据源:
- poolMaximumactiveConnections – 在任意时间可以存在的活动(也就是正在使用)连接数量,默认值:10
- poolMaximumIdleConnections – 任意时间可能存在的空闲连接数
- poolMaximumCheckoutTime – 在被强制返回之前,池中连接被检出(checked out)时间,默认值:20000 毫秒(即 20 秒)
- poolTimeToWait – 这是一个底层设置,如果获取连接花费的相当长的时间,它会给连接池打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直安静的失败),默认值:20000 毫秒(即 20 秒)
- poolPingQuery – 发送到数据库的侦测查询,用来检验连接是否处在正常工作秩序中并准备接受请求 。默认是“NO PING QUERY SET”,这会导致多数数据库驱动失败时带有一个恰当的错误消息 。
- poolPingEnabled – 是否启用侦测查询 。若开启,也必须使用一个可执行的 SQL 语句设置 poolPingQuery 属性(最好是一个非常快的 SQL),默认值:false
- poolPingConnectionsNotUsedFor – 配置 poolPingQuery 的使用频度 。这可以被设置成匹配具体的数据库连接超时时间,来避免不必要的侦测,默认值:0(即所有连接每一时刻都被侦测 — 当然仅当 poolPingEnabled 为 true 时适用)
这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用 。这种数据源配置只需要两个属性:
- initial_context – 这个属性用来在 InitialContext 中寻找上下文(即,initialContext.lookup(initial_context)) 。这是个可选属性,如果忽略,那么 data_source 属性将会直接从 InitialContext 中寻找 。
- data_source – 这是引用数据源实例位置的上下文的路径 。提供了 initial_context 配置时会在其返回的上下文中进行查找,没有提供时则直接在 InitialContext 中查找 。
有些业务场景可能需要自己自定义数据源,MyBatis也是支持的 。自定义数据源必须要实现DataSourceFactory接口 。然后采用如下配置:
type="自定义数据源全限定类名">databaseIdProvider
MyBatis 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 databaseId 属性 。MyBatis 会加载不带 databaseId 属性和带有匹配当前数据库 databaseId 属性的所有语句 。如果同时找到带有databaseId 和不带 databaseId 的相 同语句,则后者会被舍弃 。为支持多厂商特性只要像下面这样在 mybatis-config.xml 文件中加入 databaseIdProvider 即可:
推荐阅读
- 教你用A4纸种菜
- ASP.NET原创框架十-应用模块开发之页面生成
- HTTP 框架 Hertz 实践入门:性能测试指南
- MySql中json类型数据的查询以及在MyBatis-Plus中的使用
- 高压电线下打手机可能被电击吗?
- 一起来捉妖最全面的攻略 一起来捉妖攻略
- 四大发明家都发明了什么 而有史以来,最全面的发明家之一
- 对于 Display 框架,我需要了解 KMS api 吗?| Linux 驱动
- 装了.Net 7.0后,工程框架用 net6 的 dotnet watch 出错临时解决方案
- python爬虫之Scrapy框架,基本介绍使用以及用框架下载图片案例
