Hibernate里面的事务规范写法
try{
开启事务
提交事务
}catch(){
回滚事务
}finally{
关闭资源
}
写个例子表示如下
public class HibernateTest {
@Test
public void testTranscription(){
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
//使用工具类获得sessioFactory对象
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
//开启事务
tx = session.beginTransaction();
//这里就写业务逻辑
//提交事务
tx.commit();
}catch (Exception e){
e.printStackTrace();
tx.rollback();
}finally {
//关闭资源
session.close();
sessionFactory.close();
}
}
}
我们测试以下事务的效果
可以看出虽然执行了插入的sql操作,但是并没有提交到数据库里面,可知这次失败的事务给回滚了。
Hibernate绑定本地线程
1.session类似于jdbc的connection。
2.session是单线程了,我们可以利用hibernate帮助把它绑定到本地线程确保它保持单线程的状态
绑定过程如下:
1.去hibernate的核心配置文件中配置
2.调用sessionFactory的方法得到
然后调用该方法插入一条数据
然后观察控制台输出和数据库的记录
这个空指针异常就是因为我们这个线程结束了,session已经关闭了,但是我们的finally代码块又进行了一次关闭,所以会抛出异常。
Hibernate的操作数据库的API
1.使用Query对象
使用query对象,不需要写sql语句,但是写hql语句
(1)hql:hibernate query language,hibernate提供查询语言,这个hql语句和普通sql语句很相似
(2)hql和sql语句区别:
- 使用sql操作表和表字段
- 使用hql操作实体类和属性
写个例子来用Query对象实现对数据库的操作:
2.使用Criteria对象
使用这个对象查询操作,但是使用这个对象时候,不需要写语句,直接调用方法实现
3.使用SQLQuery对象
使用hibernate时候,调用底层sql实现,就是允许我们使用底层的sql语句
1.这个查询结果返回的是一个数组
80MjM0MTIzMg==,size_16,color_FFFFFF,t_70)
2.这个查询结果返回的是一个对象
现在这些都是基本查询,后面会用到更加复杂的查询语句