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

Java 使用MyBatis,我如何在不编写配置文件的情况下构建SqlSessionFactory(即以编程方式)?,java,annotations,mybatis,Java,Annotations,Mybatis,我试图为使用MyBatis和注释实现的DAO编写一个单元测试。我想实例化DAO,对我的(内存中的)数据库进行单元测试。但是,我看到的实例化它的唯一方法是通过SqlSessionFactory,我看到的实例化其中一个的唯一方法是使用SqlSessionFactoryBuilder,它的方法中只有一个是配置文件 然而,在我的单元测试中,我已经连接到内存中的数据库了,我可以用它来实例化映射器吗?如果需要进行测试,这也允许我稍后模拟或监视连接。用于测试此连接。查看更多信息 在本例中,setup()方法是

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

然而,在我的单元测试中,我已经连接到内存中的数据库了,我可以用它来实例化映射器吗?如果需要进行测试,这也允许我稍后模拟或监视
连接。

用于测试此连接。查看更多信息

在本例中,
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");
 }
用于测试此。查看更多信息

在本例中,
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");
 }

SqlSessionFactory
类有一个
openSession(连接)
方法。您可以使用它来检索
SqlSession
,使用
到内存数据库的连接

您可以通过编程方式构建
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);

然后,您可以模拟或存根
数据源
以返回所需的
连接
实例。

SqlSessionFactory
类有一个
openSession(连接)
方法。您可以使用它来检索
SqlSession
,使用
到内存数据库的连接

您可以通过编程方式构建
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);

然后,您可以模拟或存根
数据源
以返回所需的
连接
实例。

我要求在不编写文本文件的情况下执行此操作,这就是“mybatis.config.xml”的含义。我要求在不编写文本文件的情况下执行此操作,这就是“mybatis.config.xml”是的。但是我如何获得一个
SqlSessionFactory
实例而不必向
SqlSessionFactoryBuilder
提供配置文件呢?我不明白您为什么要这样做。您必须有一种在测试之外实例化
SqlSessionFactory
的方法:为什么不能这样做?因为我不想重用它,因为该文件一直在更改,我想为单元测试提供一个单独的配置。因为它只用于单元测试,所以我不想要外部文件的麻烦。这也意味着我可以将模拟对象注入到DAO中。然而,我仍然不相信这是一个好主意。好吧,这是我想要的一个选项,谢谢你的编辑来修正我问题中的错误。这正是我一直在寻找的,但我将对其进行编辑,为遇到的其他人详细说明最后一步。让我们清楚一点:我这样做只是为了我的单元测试,而不是生产代码。这可能是个坏主意。但是如何获得
SqlSessionFactory
实例而不必将配置文件提供给
SqlSessionFactoryBuilder
?我不明白您为什么要这样做。您必须有一种在测试之外实例化
SqlSessionFactory
的方法:为什么不能这样做?因为我不想重用它,因为该文件一直在更改,我想为单元测试提供一个单独的配置。因为它只用于单元测试,所以我不想要外部文件的麻烦。这也意味着我可以将模拟对象注入到DAO中。然而,我仍然不相信这是一个好主意。好吧,这是我想要的一个选项,谢谢你的编辑来修正我问题中的错误。这正是我一直在寻找的,但我将对其进行编辑,为遇到的其他人详细说明最后一步。让我们清楚一点:我这样做只是为了我的单元测试,而不是生产代码。这是个坏主意。