美文网首页
Hibernate的重要对象

Hibernate的重要对象

作者: 我是java程序员 | 来源:发表于2018-11-21 14:49 被阅读0次

    1.Configuration对象
     加载默认的hibernate.cfg.xml核心配置文件



     加载指定路径下的核心配置文件



     加载映射文件

    2.SessionFactory
     SessionFactory不是轻量级的,其内部维护了Hibernate的连接池和二级缓存(redis已经可以替代,所以现在基本已经不使用),是线程安全的,一个项目只需一个SessionFactory对象

     抽取SessionFactory工具类
    HibernateUtils.java

    package com.wuhaitao.hibernate.utils;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    /**
     * @author wuhaitao
     *SessionFactory工具类
     */
    public class HibernateUtils {
        //SessionFactory对象只需一个
        public static Configuration configuration;
        public static SessionFactory factory;
        //静态代码块赋值
        static {
            configuration = new Configuration().configure();
            factory = configuration.buildSessionFactory();
        }
        //得到Session对象
        public static Session openSession() {
            return factory.openSession();
        }
    }
    

    3.Session对象
     1.Session接口负责执行持久化对象的CRUD操作,但其并不是线程安全的,所以必须定义到方法内部中,否则会引发安全问题。代表的是Hibernate与数据库的连接对象
     2.save()方法:将记录进行保存,返回一个Serializable的id
     3.查询方法:get(),load()
    HibernateDemo2.java

    package com.wuhaitao.hibernate.utils;
    
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.junit.Test;
    
    import com.wuhaitao.hibernate.demo1.Customer;
    
    public class Hibernatedemo2 {
        @Test
        public void demo3() {
            //得到Session对象
            Session session = HibernateUtils.openSession();
            //开启事务
            Transaction transaction = session.beginTransaction();
            
            /*//处理内容,get方法查询
            Customer customer = session.get(Customer.class, 1L);
            System.out.println(customer);*/
            
            //处理内容,load方法查询
            Customer customer = session.get(Customer.class, 1L);
            System.out.println(customer);
            //提交事务
            transaction.commit();
            //释放资源
            session.close();
        }
    }
    

    区别:
     get方法是立即加载,执行到SQl代码块时,就会马上发送SSQL语句去查询.查询后返回的是真实对象本身。当查询对象不存在时,返回对象为空
     load方法是延迟加载(lazy懒加载),执行到SQl代码块时,不会发送Sql语句,当真正使用这个对象时才会去发送SQL语句。查询后返回的是代理对象,利用javassist技术产生的代理。当查询对象不存在时,会抛出ObjectNotFoundException异常。
     4.修改方法
      直接创建对象,进行修改(不推荐,但可以)
      先查询再修改(推荐)
    HibernateDemo2.java

    package com.wuhaitao.hibernate.utils;
    
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.junit.Test;
    
    import com.wuhaitao.hibernate.demo1.Customer;
    
    public class Hibernatedemo2 {
        @Test
        public void demo4() {
            //得到Session对象
            Session session = HibernateUtils.openSession();
            //开启事务
            Transaction transaction = session.beginTransaction();
            //处理内容 直接修改
            Customer customer = new Customer();
            customer.setCust_name("大白");
            customer.setCust_id(1L);
            session.update(customer);
            //提交事务
            transaction.commit();
            //释放资源
            session.close();
        }
        @Test
        public void demo5() {
            //得到Session对象
            Session session = HibernateUtils.openSession();
            //开启事务
            Transaction transaction = session.beginTransaction();
            //处理内容 直接修改
            Customer customer = session.get(Customer.class, 1L);
            customer.setCust_name("小白");
            session.update(customer);
            //提交事务
            transaction.commit();
            //释放资源
            session.close();
        }
    }
    

     5.删除
      直接删除对象
      先查询再删除(推荐)
    和修改同理
    区别:后者在涉及到级联删除的时候,会将对象级联的数据会一并删除掉。
     5.保存或更新saveOrUpdate()
     6.查询全部Query
    HibernateDemo2.java

    package com.wuhaitao.hibernate.utils;
    
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.junit.Test;
    
    import com.wuhaitao.hibernate.demo1.Customer;
    
    public class Hibernatedemo2 {
        @Test
        public void demo6() {
            //得到Session对象
            Session session = HibernateUtils.openSession();
            //开启事务
            Transaction transaction = session.beginTransaction();
            //处理内容 查询全部
            //字符串为HQL语句  Hibernate  Query  Language
            Query query = session.createQuery("from Customer");
            List<Customer> list = query.list();
            for (Iterator iterator = list.iterator(); iterator.hasNext();) {
                Customer customer = (Customer) iterator.next();
                System.out.println(customer);
            }
            //提交事务
            transaction.commit();
            //释放资源
            session.close();
        }
    }
    

    7.Transaction对象
     事务对象后期可以直接交给Spring管理。主要方法:commit(),rollback().

    相关文章

      网友评论

          本文标题:Hibernate的重要对象

          本文链接:https://www.haomeiwen.com/subject/zpsqqqtx.html