做建材的网站,网上银行登录,网店装修的意义,分类信息网站怎么做Hibernate概述#xff1a; 什么是Hibernate:是一个持久层的ORM的框架 什么是ORM: ORM:对象关系映射,指的是将一个java中的对象与关系型数据库中的表建立一种映射关系#xff0c;从而操作对象就可以完成数据库的相关操作为什么学习Hibernate 简化JDBC的开发 性能很好Hibernate… Hibernate概述 什么是Hibernate:是一个持久层的ORM的框架 什么是ORM: ORM:对象关系映射,指的是将一个java中的对象与关系型数据库中的表建立一种映射关系从而操作对象就可以完成数据库的相关操作为什么学习Hibernate 简化JDBC的开发 性能很好Hibernate的API Configuration:加载配置文件 SessionFactory:内部维护连接池。配置C3p0连接池自定义工具类。 Session: 维护一级缓存与数据库交互桥梁。 常用的方法 save(Object obj) get()/load() update() delete() saveOrUpdate() Transaction: commit(); rollback(); #####持久化类编写的规则 持久化类的概述 【】什么是持久化将内存中的一个对象持久化到数据库中过程。Hibernate框架就是用来进行持久化的框架 【】什么是持久化类一个java对象与数据库的表建立了映射关系那么这个类在Hibernate中称为是持久化类 【】持久化类java类映射文件 持久化类编写的规则 【】对持久化类提供一个无参数的构造函数 Hibernate底层需要使用反射生成实例 【】属性需要私有对私有属性提供public的get和set函数的方法 Hibernate中获取设置对象的值 【】对持久化类提供一个唯一标识OID与数据库主键对应 java中通过对象的地址区分是否是同一个对象数据库中通过主键确定是否是同一记录 在Hiberbate中通过持久化类的OID的属性区分是否是同一对象 【】持久化类中属性尽量使用包装类类型 因为基本数据类型默认是0那么0就会有很多的歧义。包装类类型默认值就是null 【】持久化类不要使用final进行修饰 #####主键生成策略 ######持久化类的三种状态 ######Hibernate的一级缓存 //区分三种状态public void demo1(){Session sessionHibernateUtils.GetSession();//手动开启事务Transaction transactionsession.beginTransaction();HibernateDemo1 hibernateDemo1new HibernateDemo1();//瞬时态对象没有唯一标识OID,没有被Session管理hibernateDemo1.setCust_name(XXXX);session.save(hibernateDemo1);//持久态对象有唯一标识OID被Session管理transaction.commit();//事件的提交session.close();//会话关闭//session.clear();//清空所有//session.evict(hibernateDemo1);//清空一个对象。这是一级缓存的管理处理//脱管态对象有唯一标识对象OID没有被Session管理System.out.println(客户名称:hibernateDemo1.getCust_name());} #####事务的回首 【】事务事务指的是逻辑上的一组操作组成这组操作的各个逻辑单元要么全部成功要么全部都失败 【】事务事务指的是逻辑上的一组操作组成这组操作的各个逻辑单元要么全部成功要么全部都失败####事务的特性 【】原子性代表事务不可分割 【】一致性代表事务执行前后数据的完整性保持一致 【】隔离性代表一个事务执行的过程中不应该受到其他事务的干扰 【】持久性代表事务执行完成后数据就持久到数据库中 ####如果不考虑隔离的问题会引发如下的安全问题 【】读问题 #脏读一个事务读到另一个事务未提交的数据 #不可重复读一个事务读到另一个事务已经提交的update数据导致在前一个事务多次查询的结果不一致 #虚读一个事务读到另一个事务已经提交的insert数据导致在前一个事务多次查询的结果不一致 【】写问题了解 #引发两类丢失更新 【】读问题的解决 #设置事务隔离级别 #Read uncommitted 以上都问题都会发生 #Read committed 解决脏读但是不可重复读和虚读有可能发生 #Repeatable read 解决脏读和不可重复读但是虚读有可能发生 #Serializable 解决所有读问题一般的情况下数据库通常会使用第二或者第三种方式隔离默认的oracle是使用第二种而mysql是使用第三种 关于在Hibernate中配置隔离的相关的问题--照片 设置隔离级别 property namehibernate.connection.isolation4/property ####sevice事务 #####Hibernate的其他API 【】Query public void queryTest(){Session sessionHibernateUtils.GetSession();//手动开启事务Transaction transactionsession.beginTransaction();//通过Session获得Query接口String hqlfrom HibernateDemo1;//查询HIbernateDemo1中的对应表的数据可以设置whereorg.hibernate.Query querysession.createQuery(hql);//设置条件//query.setParameter(0, 1);//设置分页query.setFirstResult(0);//起始数据query.setMaxResults(2);//每页的显示数ListHibernateDemo1 listquery.list();transaction.commit();//事件的提交session.close();//会话关闭} 【】Criteria public void CriteriaTest(){Session sessionHibernateUtils.GetSession();//手动开启事务Transaction transactionsession.beginTransaction();//通过session获得Criteria的对象/* Criteria criteriasession.createCriteria(HibernateDemo1.class);ListHibernateDemo1listcriteria.list();//获取数据表的全部信息*///条件查询Criteria criteriasession.createCriteria(HibernateDemo1.class);criteria.add(Restrictions.like(cust_name,宋%));ListHibernateDemo1listcriteria.list();//获取到查询的信息//设置分页criteria.setFirstResult(0);criteria.setMaxResults(3);transaction.commit();//事件的提交session.close();//会话关闭} 【】SQLQuery 信息类 public class HibernateDemo1 {private long cust_id;private String cust_name;private String cust_source;private String cust_industry;private String cust_level;private String cust_phone;private String cust_mobile;public long getCust_id() {return cust_id;}public void setCust_id(long cust_id) {this.cust_id cust_id;}public String getCust_name() {return cust_name;}public void setCust_name(String cust_name) {this.cust_name cust_name;}public String getCust_source() {return cust_source;}public void setCust_source(String cust_source) {this.cust_source cust_source;}public String getCust_industry() {return cust_industry;}public void setCust_industry(String cust_industry) {this.cust_industry cust_industry;}public String getCust_level() {return cust_level;}public void setCust_level(String cust_level) {this.cust_level cust_level;}public String getCust_phone() {return cust_phone;}public void setCust_phone(String cust_phone) {this.cust_phone cust_phone;}public String getCust_mobile() {return cust_mobile;}public void setCust_mobile(String cust_mobile) {this.cust_mobile cust_mobile;}Overridepublic String toString() {return HibernateDemo1 [cust_id cust_id , cust_industry cust_industry , cust_level cust_level , cust_mobile cust_mobile , cust_name cust_name , cust_phone cust_phone , cust_source cust_source ];}} 工具类 public class HibernateUtils {//这个包的主要重用是为了放置工具类//这个工具类是Hibernate的工具类public static final Configuration cfg;public static final SessionFactory sf;//创建一个SessionFactory对象:类似于JDBC中连接池static{//加载Hibernate核心配置文件cfgnew Configuration().configure();sfcfg.buildSessionFactory();//此处相当于创建工厂}//对外设置一个接口public static Session GetSession(){//通过SessionFactory获取到Session对象类似于JDBC中的Connectionreturn sf.openSession();}
} 转载于:https://www.cnblogs.com/byczyz/p/11427494.html