Hibernate的重要对象

2018-11-21  本文已影响0人  我是java程序员

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().

上一篇下一篇

猜你喜欢

热点阅读