Hibernate的Transaction(事务)接口和Query接口

来源:互联网 发布:golang package 编辑:程序博客网 时间:2024/06/05 10:44
一 Transaction(事务)接口
事务简单的说,就是一组对数据库的操作集合,它们要么全部成功,要么全部失败.这个可以保证数据的一致性,事务具有原子性。
①Transaction是底层的事务实现中抽象出来的接口。
②可能是一个jdbc或者jta的事务,这样有利于hibernate在不同执行环境的移植。
③hibernate要求显示的调用事务(如果仅仅是查询可以不调用)。
示例:
Transaction ts=s.beginTransaction();
...
ts.commit();
s.close();
发生异常需要ts.rollback()回滚。

二 Query接口
Query接口类型的对象可以对数据库操作,它可以使用Hql,Qbc,Qbe和原生SQL(native Sql)对数据库操作.官方推荐使用Hql语句。
通过query接口我们可以完成更加复杂的查询任务。

三 实战Query接口——通过用户来查询数据
package com.cakin.view;import java.util.Date;import java.util.List;import javax.management.RuntimeErrorException;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import com.cakin.domain.Employee;import com.cakin.util.HibernateUtil;import com.cakin.util.MySessionFactory;public class TestMain {    /**     * @param args     */    public static void main(String[] args) {        Session session=HibernateUtil.getCurrentSession();        Transaction ts=null;        try {            ts=session.beginTransaction();            //获取query引用[这里 Employee不是表.而是domain类名]            //[where 后面的条件可以是类的属性名,也可以是表的字段,按照hibernate规定,我们还是应该使用类的属性名.]            Query query=session.createQuery("from Employee where name='cakin'");            //通过list方法获取结果,这个list会自动的将封装成对应的domain对象            //所以我们jdbc进行二次封装的工作没有.            List<Employee> list=query.list();            for(Employee e: list){                System.out.println(e.getName()+" "+e.getHiredate());            }                        ts.commit();                    } catch (Exception e) {                        if(ts!=null){                ts.rollback();            }            throw new RuntimeException(e.getMessage());        }finally{            //关闭session            if(session!=null&&session.isOpen()){                session.close();            }                    }    })



四 测试结果
Hibernate:
    select
        employee0_.id as id0_,
        employee0_.name as name0_,
        employee0_.email as email0_,
        employee0_.hiredate as hiredate0_
    from
        employee employee0_
    where
        employee0_.name='cakin'
cakin 2017-10-04 17:34:59.0
阅读全文
0 0
原创粉丝点击