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

来源:互联网 发布:推荐好听的淘宝会员名 编辑:程序博客网 时间:2024/05/22 13:58

一、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、释放资源 */@Testpublic 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生产SessionSession 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;//创建SessionFactorystatic{//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 {/** * 保存一个实体类 */@Testpublic 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查询一个实体 */@Testpublic void testFindOne(){Session s = HibernateUtil.openSession();Transaction tx = s.beginTransaction();//第一个参数指的是查询的实体类字节码  第二个参数指的是查询的idCustomer c = s.get(Customer.class, 3L);System.out.println(c);tx.commit();s.close();}/** * 更新一个实体 */@Testpublic 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操作时,只要给定主键就可以删除。 *  而现在必须要给定一个对象。 *  这个对象可以只包含主键信息。 */@Testpublic 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();}}

原创粉丝点击