java - 替换 spring/hibernate 项目中的 import.sql 文件

标签 java spring hibernate spring-mvc

在我的 spring 项目中,我将 hibernate 配置为根据我的实体类在数据库中创建表。另外,当我需要在此表上插入一些初始值时,我将一个名为 import.sql 的文件放在类路径上,并使用 sql 命令在数据库中插入数据。我想知道是否有一种方法可以完成此导入功能,而无需在我的项目中放置 import.sql 文件,仅使用 java 类。有人知道这是否可能吗?

最佳答案

您可以考虑两种选择,

第一个不仅仅是java,但由于您正在使用该堆栈,因此您可以考虑 Spring DBUnit

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/context.xml"})
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class,
        DirtiesContextTestExecutionListener.class,
        TransactionalTestExecutionListener.class,
        DbUnitTestExecutionListener.class})
@DbUnitConfiguration(dataSetLoader = ColumnSensingFlatXMLDataSetLoader.class)
public class TemplateIT {

    @Before
    public void after() throws Exception {
        IDatabaseConnection connection;
        IDatabaseTester databaseTester = new JdbcDatabaseTester(JDBC_DRIVER, JDBC_URL + "&sessionVariables=FOREIGN_KEY_CHECKS=0", USER, JDBC_PASSWORD);
        connection = databaseTester.getConnection();
        QueryDataSet partialDataSet = new QueryDataSet(connection);
        DatabaseOperation.DELETE_ALL.execute(connection,
                partialDataSet);
    }


    @DatabaseSetup("../dbunit/data.xml")
    @ExpectedDatabase("../dbunit/expected.xml")
    @Test
    public void testDBUnit() throws Exception {
        ...
    }


}

数据是通过 XML 处理的,但由于该库专注于测试,因此它提供的许多实用程序比直接处理 SQL 更胜一筹。由于@ExpectedDatabase等,更容易处理部分数据,简化断言。

其次,我经常使用的一种“仅限 java”设置是通过 hibernate 实体准备数据。我假设您正在使用通用 DAO,即使没有,设置它也很容易。比在测试的 @Before 方法中简单地设置您喜欢的数据库,一个片段

@Before
public void before() throws DAOException {
   Company company = new Company();
    companyDAO.makePersistent(company);
}

我喜欢这种方法,因为我认为可以提高可移植性(我经常在内存数据库中使用进行测试)、可读性和可维护性。缺点是测试中需要大量代码,并且对于复杂对象来说准备数据可能会变得乏味。

关于java - 替换 spring/hibernate 项目中的 import.sql 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26568123/

相关文章:

java - 如何在 Spring DATA JPA 中使用 UUID 生成器?

hibernate - 如何在多项目 Maven 中配置 Log4j

java - Hibernate 验证 - 使用 @GroupSequence 对嵌套类进行分组

java - 垫 : How do you diagnose "x instances of "byte[ ]", loaded by "<system class loader >"occupy y (z%) bytes" memory issues?

java - Integer.parseInt() 相对于 Integer 构造函数的优势

java - 无法通过 requestMapping 处理请求

java - 从 python/django 学习 java/spring

java - 枚举相同(不同语言)类

java - Jmockit 中的 Lambda 期望

java - 使用 WebSphere 在 RSA (Rational Software Architect) 上设置 Spring + Maven