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();}}
- Hibernate学习笔记 -- day02 hibernateAPI详解以及入门案例演示
- Luncen学习笔记 -- day02 入门
- Hibernate学习之入门案例笔记
- JDBC学习笔记 -- day02 常用类详解
- 【02】框架学习—Hibernate第一个入门案例详解
- Hibernate 的学习之路之错误笔记day02
- java 学习笔记 day02
- Jquery学习笔记---Day02
- C++ 学习笔记day02
- mysql 学习笔记 day02
- Java学习笔记 day02
- oracle学习笔记--day02
- Java学习笔记Day02
- Qt学习笔记day02
- e3mall Day02 学习笔记
- struts2 day02学习笔记
- hibernate 学习(二)创建hibernate的配置文件和通过hibernateAPI访问数据库
- struts2学习笔记 -- day02 struts2主配置文件详解
- 下软件,就靠这几个网站
- 鼠标的连键问题
- 命名规范,快捷键
- 上传开源项目到GitHub,原来这么简单啊
- 顺序表基本操作归纳整理
- Hibernate学习笔记 -- day02 hibernateAPI详解以及入门案例演示
- 教你关掉预览窗口
- 买内存,注意这两点
- STL之list学习笔记
- ubuntu16.04安装tensorflow1.3
- CPU下面的硅胶是怎么回事
- Xpath dom4j解析带有命名空间的XML的方法
- 7.26树讲座总结
- 系统盘空间减小的太快