Hibernate事务增删改查(第一部分)

Hibernate的增删改查(事务)

1.Hibernate中的事物

  1.1 设置事物隔离级别
Hibernate中书屋的隔离级别都是用字节存储的
                              二进制   十进制
read uncommitted    读未提交    0001      1
read committed      读已提交    0010      2
repeatable read     重复读      0100      4    mysql默认级别
serializable        可串行化    1000      8
​
配置数据库的隔离级别直接写十进制的值即可
在主配置文件中配置数据库的隔离级别
<property name="Hibernate.connection.isolation">4</property> 
  1.2 Hibernate管理事务的方法
 //开启事务
    Transcation t = session.beginTranscation();
    try{
      //.......写自己的代码(do som work....)
      //提交事务
      t.commit();
    }catch(Exception e){
      //异常:事务回滚
      if(t!=null){
          t.rollback();
      }
    } 
  1.3 Hibernate得到Session对象的方式
    Configuration c = new Configuration();
    c.Configure();
    SessionFactory factory = c.bulidSessionFactory();
    //方式一:
    Session session = factory.openSession();
    //方式二:
    Session session = factory.getCurrentSession(); 
  1.4 openSession 和 getCurrentSession的区别
openSession()和getCurrentSession()   
   1.openSession()每次调用生成新的Session
     getCurrentSession()每次调用都使用的同一个session(与当前线程绑定的session)
   2.openSession()使用不需要配置
     getCurrentSession()必须要配置,在主配置文件hibernate.cfg.xml中配置
       <property name="hibernate.current_session_context_class">
          thread
       </property>
   3. openSession()使用之后可以关闭  
      getCurrentSession()不能关闭
   4.Session要线程安全建议使用getCurrentSession();  
​
   建议用getCurrentSession() 
  1.5 HibernateUtils封装的工具类
 public class HibernateUtils {
        private static SessionFactory sessionFactory=null;
        static {
            Configuration configuration = new Configuration();
            configuration.configure();
            sessionFactory = configuration.buildSessionFactory();
        }
        public static Session openSession() {
            return sessionFactory.openSession();
        }
        public static Session getCurrentSession() {
            return sessionFactory.getCurrentSession();
        }
        //openSession产生的session要关闭
        public static void closeSession(Session session) {
              session.close();
        }
    } 

2.Hibernate的增删改查

  2.1 插入(save)
    Session session = HibernateUtils.getCurrentSession();
      Transaction t = session.beginTransaction();
      try {
        User user =new User();
        user.setUser_name("皮皮虾");
        user.setUser_pwd("123456");
        session.save(user);
        t.commit();
      } catch (Exception e) {
        // TODO: handle exception
        t.rollback();
      } 
  2.2 修改(update)
      Session session = HibernateUtils.getCurrentSession();
      Transaction t = session.beginTransaction();
      try {
        //根据唯一标识来修改 
        //如果对象的某些属性没有设值,修改后这些属性的值为null  
        User user =new User();
        user.setUser_id(1);
        user.setUser_name("看谁在睡觉?");
        session.update(user);
        t.commit();
      } catch (Exception e) {
        // TODO: handle exception
        t.rollback();
      } 
  2.3 删除(delete)
    Session session = HibernateUtils.getCurrentSession();
      Transaction t = session.beginTransaction();
      try {
        //根据唯一表示来修改
        User user =new User();
        user.setUser_id(1);
        session.delete(user);
        t.commit();
      } catch (Exception e) {
        // TODO: handle exception
        t.rollback();
      } 
  2.4 查询(Query)
  2.4.1 以oid查询
//参数1:查询的类型:T.class 参数2:唯一标识id值
 session.find(T.class,id);
 session.get(T.class,id);
 session.load(T.class,id);
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
try {
   //Student student = session.find(Student.class, 5);
   Student student = session.get(Student.class, 5);
   //Student student = session.load(Student.class, 5);
   System.out.println(student);
   transaction.commit();
} catch (Exception e) {
   // TODO: handle exception
   transaction.rollback();
}
 2.4.2 对象导航图查询
  常用于多表查询

   2.4.3 原生sql语句查询

    SQL(结构化查询语言 Structor Query Language)

  Hibernate5.2以后用 session.createNativeQuery(sql语句);
  Hibernate5.2以前用session.createSQLQuery(sql语句);
  //取session
    Session session = HibernateUtils.getCurrentSession();
    Transaction t= session.beginTransaction();
    try {
         //使用原生sql语句查询查询所有
         //createNativeQuery是hibernate5.2版本之后建议用
         /*NativeQuery<User>  query= session.createNativeQuery("select * from user", User.class);*/
        //createSQLQuery是Hibernate5.2版本之前使用的,但是目前或者将来不会使用了
       NativeQuery<User>  query=session.createSQLQuery("select * from user");
        //设置从第几个位置开始取数据
        query.setFirstResult(0);
        //设置每次最多取多少条数据
        query.setMaxResults(4);
      //query.list() 与query.getResultList()等价
        System.out.println("=--==="+query.list());
        t.commit();
    } catch (Exception e) {
        // TODO: handle exception
        if (t!=null) {
            t.rollback();
        }
    }
}  
  2.4.4 HQL查询(Hibernate Query Language)
    1.基础查询
     Session session = HibernateUtils.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        try {
       //基本语法:from  包名+类名(如果整个程序中只有这么一个类,直接省略包名,默认查找该类)
            String HQL = " from com.xx.domain.Student";
       //参数1:HQL语句 参数2:结果类型
            Query<Student> query = session.createQuery(HQL, Student.class);
       List<Student> list = query.list()
            System.out.println(list);            
            transaction.commit();
        } catch (Exception e) {
            // TODO: handle exception
            transaction.rollback();
        }

    2.别名查询

    查询所有的信息 
     Session session = HibernateUtils.getCurrentSession(); Transaction transaction = session.beginTransaction(); try { String HQL = "select s from Student s"; Query<Student> query = session.createQuery(HQL, Student.class); List<Student> list = query.list(); System.out.println(list); transaction.commit(); } catch (Exception e) { // TODO: handle exception transaction.rollback(); }
    
     查询持久化类的某个成员变量
     Session session = HibernateUtils.getCurrentSession(); Transaction transaction = session.beginTransaction(); try { String HQL = "select s.name from Student s where id=:id"; Query query = session.createQuery(HQL); query.setParameter("id", 2); System.out.println(query.list()); transaction.commit(); } catch (Exception e) { // TODO: handle exception transaction.rollback(); }

    3.条件查询 

方式一:
    Session session = HibernateUtils.getCurrentSession();
    Transaction transaction = session.beginTransaction();
    try {
    //:user_id表示占位
    String HQL="from com.xx.domain.Student where id=:id";
    Query<User> query =     session.createQuery(HQL, Student.class);
    //参数1:表示属性名 ,参数2:属性名对应的值
    query.setParameter("id", 2);
    System.out.println(query.uniqueResult());
    transaction.commit();
    } catch (Exception e) {
         // TODO: handle exception
         if (transaction!=null) {
             transaction.rollback();
         }
    }
方式二:
  Session session = HibernateUtils.getCurrentSession();
   Transaction transaction = session.beginTransaction();
   try {
      String HQL = " from Student where id=?";
      Query<Student> query = session.createQuery(HQL, Student.class);
    //?号的位置从0开始 query.setParameter(
0, 2); System.out.println(query.uniqueResult()); transaction.commit(); } catch (Exception e) { // TODO: handle exception transaction.rollback(); }


原文地址:https://www.cnblogs.com/a77355699/p/7872584.html