我正在使用现有的Java代码,其中已部署的系统上存在现有的JDBC连接池机制,并且已经存在用于获取JDBC连接的设置。我想利用它来创建MyBatis SqlSession对象,而无需创建Configuration,DataSource和其他东西
我有已经创建了java.sql.Connection
对象的代码,并获得了所需的资源。我想利用它并获得该SqlSession
对象并从那时起使用MyBatis。
我不希望MyBatis管理连接池,确定要使用的数据源等。
答案 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对象。