直接从现有的Connection创建SqlSession

时间:2019-08-28 00:40:49

标签: java jdbc mybatis

我正在使用现有的Java代码,其中已部署的系统上存在现有的JDBC连接池机制,并且已经存在用于获取JDBC连接的设置。我想利用它来创建MyBatis SqlSession对象,而无需创建Configuration,DataSource和其他东西

我有已经创建了java.sql.Connection对象的代码,并获得了所需的资源。我想利用它并获得该SqlSession对象并从那时起使用MyBatis。

我不希望MyBatis管理连接池,确定要使用的数据源等。

2 个答案:

答案 0 :(得分:0)

恐怕您无法避免创建Configuration对象。内部mybatis机器(如执行程序)使用它。但是,即使您可以,也无济于事。在这种情况下,您将需要自己实现Configuration的大部分功能,因此这样做没有任何意义。

您的主要目标是能够使用SqlSessionFactory.openSession(Connection connection)方法。为此,您需要拥有SqlSessionFactory。最简单的方法是按照mybatis documentation中所述创建Configuration

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的适配器。

答案 1 :(得分:0)

我的解决方案与上面的Roman类似,但是我需要创建一个Oracle数据源。由于各种原因,需要使用Class.forName类型序列

创建连接
Class.forName("oracle.jdbc.driver.OracleDriver");
String connectionString = "jdbc:oracle:thin:@//yadayada";
String username = "myusername"; 
String password = "mypassword";
OracleDataSource oracleDataSource = new OracleDataSource();
oracleDataSource.setURL(connectionString);
oracleDataSource.setPassword(password);
oracleDataSource.setUser(username);
environment = new Environment("dev",transactionFactory,oracleDataSource);
configuration = new Configuration(environment);
configuration.addMappers("MyMybatisMapper");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
return sqlSessionFactory.openSession();

我所缺少的是OracleDataSource对象。