zoukankan      html  css  js  c++  java
  • 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(); }


  • 相关阅读:
    Build a pile of Cubes
    一键升级所有pip过期库
    AWGN
    调制详解——待完善
    BASK、BFSK、BPSK调制方法的Matlab程序实现
    tomcat运行问题解决方法
    ehcache简单使用
    MySQL 数据库中用户表中口令登陆设置
    和自己赛跑的人
    中文词频统计
  • 原文地址:https://www.cnblogs.com/a77355699/p/7872584.html
Copyright © 2011-2022 走看看