簡體   English   中英

在spring / hibernate項目中替換import.sql文件

[英]replacement for import.sql file in spring/hibernate project

在我的春季項目中,我已將hibernate配置為根據實體類在數據庫中創建表。 另外,當我需要在此表上插入一些初始值時,我使用sql命令在類路徑上放置了一個名為import.sql的文件,以在數據庫中插入數據。 我想知道是否有一種無需使用我的java類就可以在我的項目中放置import.sql文件的情況下完成此導入功能的方法。 有人知道這是否可能嗎?

您可以考慮兩種選擇,

第一個不僅是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測試方法,只需按照自己的喜好設置數據庫即可

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

我贊成這種方法,因為我認為它提高了可移植性(通常在內存DB中用於測試),可讀性和可維護性。 缺點是測試中有很多代碼,准備數據對於復雜對象可能會很乏味。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM