hibernate + hsqldb单元测试

1、测试环境连接hsqldb,使用hibernate的自动建表功能。

 1 <bean id="sessionFactory"
 2        class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
 3     <property name="dataSource" ref="dataSource"/>
 4     <property name="packagesToScan">
 5         <list>
 6             <!-- 可以加多个包 -->
 7             <value>test.data</value>
 8         </list>
 9     </property>
10     <property name="hibernateProperties">
11         <props>
12             <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
13             <prop key="hibernate.show_sql">true</prop>
14            <!-- 启动时自动删除以前的数据库表,重新建表,谨慎使用 -->
15              <prop key="hibernate.hbm2ddl.auto">create</prop>
16         </props>
17     </property>
18 </bean>

 

2、hsql不支持AUTO_INCREMENT语法,因此带有以下注解的表不能自动创建,需要自己手动加载sql文件创建表。

@GeneratedValue(strategy = GenerationType.IDENTITY)
加载sql文件的配置如下:
<jdbc:embedded-database id="dataSource" type="HSQL">
    <jdbc:script location="/data/hsql_init.sql"/>
</jdbc:embedded-database>

3、使用事务回滚

@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/pathTo/spring/context/applicationContext.xml")
@TransactionConfiguration(transactionManager = "jdbcTransactionManager", defaultRollback = true)
@Transactional
public class LocationDaoTest {
  @Test
  public void testDAOsCRUD(){}
}

这个方法没有验证过。

4、保留字问题

尽量不要在表名称、列名称中使用保留字,因为不同的数据库对保留字处理方式不一样,有的使用(`keyword`),有的使用("keyword"),有的使用([keyword]),无法实现使用hsqldb对其他数据库的无缝测试。

5、优点

可使用内存数据库,不产生脏数据,无数据干扰,可以重复测试。

posted @ 2017-10-23 17:41  风小雅  阅读(541)  评论(1编辑  收藏  举报