在spring / hibernate项目中替换import.sql文件

时间:2014-10-25 22:59:57

标签: java spring hibernate spring-mvc

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

1 个答案:

答案 0 :(得分: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"我经常使用的设置是通过hibernate实体准备数据。我假设您正在使用通用DAO,即使没有,也很容易设置它。比在@Before测试方法中,只需将数据库设置为您喜欢的,一个片段

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

我赞成这种方法,因为在我看来增加了可移植性(通常我在内存DB中用于测试),可读性和维护。缺点是测试中有很多代码,准备数据对于复杂对象来说可能会很繁琐。