逐一进行检查分析,事务也开启了,并使用注解方式标记@RollBack(true),在控制台中也打出了事务回滚的信息,但仍然不能自动回滚。
后来感觉是数据库的原因,我的数据库使用的是MySql,这就存在数据表的类型是否支持事务情况。逐查阅MySql相关文档,发现,InnoDB类型的表是支持事务的,而MyISAM是不支持事务的,立刻查看数据表类型,果然为MyISAM,改为InnoDB后,重新进行测试,问题得到解决。
关于junit单元测试工具的安装请参看第二课的内容(其实就是导入一个junit的jar包就行了)首先认识几个注解标签
@Test:测试方法
@Before:初始化方法
@After:释放资源
执行顺序:@Before->@Test->@After
第一步新建测试文件夹(目的就是用来存放测试类,使项目更整洁,分类明确,好管理)
选中项目右键new->Source Folder 输入文件夹的名称例如test
在测试文件夹下创建测试类(就是创建个普通的类)
如下在测试类中使用junit进行单元测试
下面只是先搭建一个测试框架
搭建好之后测试hibernate访问数据库的代码注意:导入的包不要弄错,都是hibernate的包
public class StudentTest { private SessionFactory sessionFactory private Session session private Transaction transaction @Before public void init(){ //创建配置对象 Configuration config = new Configuration() //创建服务注册对象 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry() //创建会话工厂对象 sessionFactory = config.buildSessionFactory(serviceRegistry) //会话对象 session = sessionFactory.openSession() //开启事务 transaction = session.beginTransaction() } @Test public void testSaveStudents(){ Student s = new Student(1, "小明", new Date(), "北京xxxx街道5号楼201") session.save(s)//保存对象到数据库 } @After public void destory(){ transaction.commit()//提交事务 session.close()//关闭会话 sessionFactory.close()//关闭会话工厂 }}
进行测试如下: 选中测试方法右键run as ->junit test就行了
执行成功控制台打印信息:
查看数据库表
可以看到增加了一条信息,测试成功
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)