java - 直接从现有 Connection 创建 SqlSession
问题描述
我正在使用现有的 Java 代码,其中在已部署的系统上有一个现有的 JDBC 连接池机制和一个已经存在的设置来获取 JDBC 连接。我想利用它来创建一个 MyBatis SqlSession 对象,而无需创建配置、数据源和其他东西
我有已经创建java.sql.Connection
对象的代码被赋予了所需的资源。我想利用它并获取该SqlSession
对象并从那时起使用 MyBatis。
我不希望 MyBatis 管理连接池、确定使用哪个数据源等。这可能吗?
解决方案
恐怕您无法避免创建Configuration
对象。它由内部 mybatis 机器使用,例如执行程序。但即使你可以,它也不会对你有太大帮助。在这种情况下,您将需要自己实现大部分Configuration
功能,因此这样做没有意义。
你的主要目标是能够使用SqlSessionFactory.openSession(Connection connection)
方法。为此,您需要拥有SqlSessionFactory
. 最简单的方法是Configuration
像 mybatis文档中描述的那样创建:
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
// set properties to configuration here
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(configuration);
现在,如果您的连接池确实实现DataSource
了,您可以直接使用它来创建环境。如果没有,您需要在您的池周围创建一个适配器,该适配器实现javax.sql.DataSource
.
推荐阅读
- android - 更改工具栏中的图标颜色
- node.js - 错误:Route.get() ,似乎无法通过
- scala - 结构细化中的结果类型可能不引用用户定义的值类
- mongodb - Upsert 一个或多个文档,但仅在现有文档满足条件时更新
- r - 逻辑回归混淆矩阵错误:`data`和`reference`应该是具有相同水平的因素
- node.js - 如何为 dockerized nodeJS 应用程序设置正确的组成员
- c++ - 立方体是在什么时候绘制的?
- python - 从 2nd 刮掉文字
- php - Laravel 问题:是否可以在不删除的情况下临时禁用路由中的 url?
- cloudant - Cloudant 数据层本地版本 1.1 中加载数据库失败