使用MyBatis,如何在不编写配置文件的情况下(即以编程方式)构建SqlSessionFactory?

时间:2012-11-20 14:39:44

标签: java annotations mybatis

我正在尝试使用注释为使用MyBatis实现的DAO编写单元测试。我想将DAO实例化为针对我的(内存中)数据库的单元测试。但是,我看到实例化它的唯一方法是通过SqlSessionFactory,我看到实例化其中一个的唯一方法是使用SqlSessionFactoryBuilder只有其配置文件的方法。

但是,在我的单元测试中,我已经连接到内存数据库,我可以使用它以某种方式实例化映射器吗?如果我需要进行测试,这也允许我稍后模拟或监视Connection

2 个答案:

答案 0 :(得分:2)

SqlSessionFactory类有openSession(Connection connection)方法。您可以使用它来使用内存数据库中的SqlSession来检索Connection

您可以通过编程方式构建SqlSessionFactory,而无需使用包含以下代码的配置文件:

Environment environment = new Environment("ID", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMappers(mappersPackageName);
// Other configuration tweaks
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(configuration);

然后,您可以模拟或存根DataSource以返回所需的Connection实例。

答案 1 :(得分:1)

使用junit进行测试。查看this link了解详情

在这种情况下,setup()方法是创建SqlSessionFactory对象的正确点

 @BeforeClass
 public static void setUp() throws Exception {
  log.info("starting up myBatis tests");
  String resource = "mybatis.config.xml";
  Reader reader = Resources.getResourceAsReader(resource); 
  sf = new SqlSessionFactoryBuilder().build(reader,"testing");
 }