【问题标题】:replacement for import.sql file in spring/hibernate project在 spring/hibernate 项目中替换 import.sql 文件
【发布时间】:2014-12-21 11:37:15
【问题描述】:

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

【问题讨论】:

  • 您必须将所有 sql 语句存储在数组/列表中,并在应用程序启动时执行语句。

标签: java spring hibernate spring-mvc


【解决方案1】:

您可以考虑两种选择,

第一个不仅是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”设置是通过休眠实体准备数据。我假设您使用的是通用 DAO,即使没有,也很容易设置它。比在您的测试的 @Before 方法中简单地设置您喜欢的数据库,一个 sn-p

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

我赞成这种方法,因为在我看来可以提高可移植性(我经常在内存 DB 中用于测试)、可读性和可维护性。缺点是测试中的代码很多,对于复杂的对象来说,准备数据可能会很乏味。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    相关资源
    最近更新 更多