Hibernate学习笔记 -- day02 hibernateAPI详解以及入门案例演示

一、Hibernate中API详解

1、configuration对象详解

作用:

        用于加载配置文件

常用方法:

        Configuration():它是负责加载类的根路径下名称为hibernate.properties文件,它加载不了xml文件。

        configure():它是负责加载类的根路径下,名称为hibernate.cfg.xml的配置文件。

        buildSessionFactory():它是负责解析xml文件,创建SessionFactory的

2、SessionFactory对象详解

作用:

        用于生产Session对象

常用方法:

        openSession():每次都是产生一个新的Session。

说明信息:

         它创建时维护了很多的信息:

               (1)、连接数据库的信息

               (2)、hibernate的基本配置

               (3)、映射文件的位置

               (4)、还维护了映射文件的所有配置

               (5)、还维护了每个实体的常用SQL语句:全字段插入,根据ID的全字段更新,根据ID的查询和根据ID删除。

         由于此对象维护了很多的信息,所以在创建的时候会消耗很多资源。

         由同一个SessionFactory生产的Session,共享SessionFactory里面维护的信息。

         SessionFactory是线程安全的。

SessionFactory的使用原则:

         一个应用只有一个SessionFactory,不应该反复的创建和销毁

3、session对象详解

作用:

        和数据库交互增删改查。用于开启事务,获取事务对象

常用方法:

        save(Object):保存一个实体

        update(Object):更新一个实体

        delete(Object):删除一个实体

        get(Class clazz,Serializable id):根据id查询一个实体

        beginTransaction():开启事务,并返回事务对象。

        close():关闭Session

说明信息:

        由于SessionFactory已经维护了很多信息,所以到Session这只维护了较少的信息。

        它的创建和销毁不会消耗太多资源。

        它不是线程安全的(线程不安全)。

        它维护了hibernate的一级缓存

Session的使用原则:

        让一个线程上只有一个Session

4、Transaction对象详解

作用:

        用于控制事务

常用方法:

        commit():提交事务

        rollback():回滚事务

二、入门案例的CRUD演示

1、添加用户

package cn.itcast.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

import cn.itcast.domain.Customer;

/**
 * hibernate的入门案例
 * @author zhy
 *
 */
public class HibernateDemo1 {
	
	/**
	 * 需求:
	 * 	保存一个客户实体到数据库中
	 * 步骤分析:
	 * 	1、加载hibernate主配置文件
	 * 	2、依据配置文件中的信息构建SessionFactory对象
	 * 	3、使用SessionFactory生产Session
	 *  4、开启事务
	 *  5、执行保存操作
	 *  6、提交事务
	 *  7、释放资源
	 */
	@Test
	public void test1(){
		Customer c = new Customer();
		c.setCustName("TBD云集中心");
		c.setCustSource("电话");
		c.setCustIndustry("商业办公");
		c.setCustLevel("普通客户");
		c.setCustAddress("昌平区北七家镇");
		c.setCustPhone("010-34983498");
		
		 //1、加载hibernate主配置文件
		Configuration cfg = new Configuration();
		cfg.configure();
		 //2、依据配置文件中的信息构建SessionFactory对象
		SessionFactory factory = cfg.buildSessionFactory();
		 //3、使用SessionFactory生产Session
		Session session = factory.openSession();
		 //4、开启事务
		Transaction tx = session.beginTransaction();
		 //5、执行保存操作
		session.save(c);
		 //6、提交事务
		tx.commit();
		 //7、释放资源
		session.close();
		factory.close();
	}
}

2、HibernateUtils的抽取

package cn.itcast.utils;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
 * hibernate的工具类
 * 	它里面要做的是:
 * 		根据配置文件创建SessionFactory(只能创建一次)
 * 		返回一个Session对象
 * @author zhy
 *
 */
public class HibernateUtil {
	//定义一个SessionFactory对象
	private static SessionFactory factory;

	//创建SessionFactory
	static{
		//hibernate把可以预见的异常都转成了运行时异常。
		try {
			Configuration cfg = new Configuration();
			cfg.configure();
			factory = cfg.buildSessionFactory();
		} catch (Exception e) {
//			e.printStackTrace();
			throw new ExceptionInInitializerError("初始化SessionFactory失败!");
		}
	}
	
	/**
	 * 获取Session对象
	 * @return
	 */
	public static Session openSession(){
		return factory.openSession();
	}
}

3、Hibernate的CRUD操作

package cn.itcast.test;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.itcast.domain.Customer;
import cn.itcast.utils.HibernateUtil;

/**
 * hibernate的CRUD
 * @author zhy
 *
 */
public class HibernateDemo4 {
	/**
	 * 保存一个实体类
	 */
	@Test
	public void testSave(){
		Customer c = new Customer();
		c.setCustName("修正健康大厦");
		c.setCustSource("电话");
		c.setCustIndustry("医药制造");
		c.setCustLevel("普通客户");
		c.setCustAddress("昌平区北七家镇");
		c.setCustPhone("010-34983498");
		
		Session s = HibernateUtil.openSession();
		Transaction tx = s.beginTransaction();
		s.save(c);
		tx.commit();
		s.close();
	}
	
	/**
	 * 根据id查询一个实体
	 */
	@Test
	public void testFindOne(){
		Session s = HibernateUtil.openSession();
		Transaction tx = s.beginTransaction();
		//第一个参数指的是查询的实体类字节码  第二个参数指的是查询的id
		Customer c = s.get(Customer.class, 3L);
		System.out.println(c);
		tx.commit();
		s.close();
	}
	
	/**
	 * 更新一个实体
	 */
	@Test
	public void testUpdate(){
		Session s = HibernateUtil.openSession();
		Transaction tx = s.beginTransaction();
		//根据id查询一个实体
		Customer c = s.get(Customer.class, 3L);
		//修改实体数据
		c.setCustName("传智专修学院");
		//更新一个实体
		s.update(c);
		tx.commit();
		s.close();
	}
	
	/**
	 * 删除一个实体。
	 * 注意:
	 * 	以前在jdbc操作时,只要给定主键就可以删除。
	 *  而现在必须要给定一个对象。
	 *  	这个对象可以只包含主键信息。
	 */
	@Test
	public void testDelete(){
		Session s = HibernateUtil.openSession();
		Transaction tx = s.beginTransaction();
		//根据id查询一个实体
		Customer c = s.get(Customer.class, 2L);
		//删除一个实体
		s.delete(c);
		tx.commit();
		s.close();
	}
}

你可能感兴趣的:(ssh框架)