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 session=HibernateUtils.GetSession();//手动开启事务Transaction transaction=session.beginTransaction();HibernateDemo1 hibernateDemo1=new 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 name="hibernate.connection.isolation">4</property>

####sevice事务:

#####Hibernate的其他API

【】Query

public void queryTest(){Session session=HibernateUtils.GetSession();//手动开启事务Transaction transaction=session.beginTransaction();//通过Session获得Query接口String hql="from HibernateDemo1";//查询HIbernateDemo1中的对应表的数据,可以设置whereorg.hibernate.Query query=session.createQuery(hql);//设置条件//query.setParameter(0, "1");//设置分页query.setFirstResult(0);//起始数据query.setMaxResults(2);//每页的显示数List<HibernateDemo1> list=query.list();transaction.commit();//事件的提交session.close();//会话关闭}

【】Criteria

public void CriteriaTest(){Session session=HibernateUtils.GetSession();//手动开启事务Transaction transaction=session.beginTransaction();//通过session获得Criteria的对象/* Criteria criteria=session.createCriteria(HibernateDemo1.class);List<HibernateDemo1>list=criteria.list();//获取数据表的全部信息*///条件查询Criteria criteria=session.createCriteria(HibernateDemo1.class);criteria.add(Restrictions.like("cust_name","宋%"));List<HibernateDemo1>list=criteria.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核心配置文件cfg=new Configuration().configure();sf=cfg.buildSessionFactory();//此处相当于创建工厂
    }//对外设置一个接口public static Session GetSession(){//通过SessionFactory获取到Session对象,类似于JDBC中的Connectionreturn sf.openSession();}
}

转载于:https://www.cnblogs.com/byczyz/p/11427494.html

Hibernate学习笔记(二)相关推荐

  1. hibernate学习笔记二

    上一篇关于hibernate学习笔记一,主要是作为hibernate的入门知识.没有和spring发生任何关系,这一篇我将把spring集成进去,看spring如何管理hibernate,还有和未使用 ...

  2. Hibernate学习笔记二:Session

    Session概述 Session是Hibernate提供的最主要的接口,它提供了基本的保存, 更新, 删除和加载 Java 对象的方法. Session 具有一个缓存, 位于缓存中的对象称为持久化对 ...

  3. [转载]dorado学习笔记(二)

    原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...

  4. css中怎么加入立体模型,CSS学习笔记二:css 画立体图形

    继上一次学了如何去运用css画平面图形,这一次学如何去画正方体,从2D向着3D学习,虽然有点满,但总是一个过程,一点一点积累,然后记录起来. Transfrom3D 在这一次中运用到了一下几种属性: ...

  5. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  6. PyTorch学习笔记(二)——回归

    PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...

  7. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

  8. Scapy学习笔记二

    Scapy学习笔记二 Scapy Sniffer的用法: http://blog.csdn.net/qwertyupoiuytr/article/details/54670489 Scapy Snif ...

  9. Ethernet/IP 学习笔记二

    Ethernet/IP 学习笔记二 原文链接:http://wiki.mbalib.com/wiki/Ethernet/IP 1.通信模式 不同于源/目的通信模式,EtherNet/IP 采用生产/消 ...

最新文章

  1. 与servlet Api 的集成
  2. python快速编程答案-100+Python编程题带你快速上手(附答案)
  3. linux利用grep查看打印匹配的下几行或前后几行的命令
  4. jgroups_JGroups:无需额外基础架构的领导人选举
  5. PHP笔记-表格及分页功能
  6. Magento: 自动生成产品SKU Auto generated SKU when add product in magento
  7. 关于TagHelper的那些事情——自定义TagHelper(内嵌TagHelper)
  8. hortonworks/registry配置详解
  9. Echarts简单介绍
  10. 【Web前端】hexo+GitPages搭建博客
  11. SQL查询语句精华 笔记
  12. iOS几款实用的工具类demo
  13. SQL SERVER 2000数据库置疑处理
  14. 相关系数——皮尔逊相关系数的公式及其理解
  15. matlab开普勒方程求地球偏心距,第二章-开普勒方程PPT课件
  16. UIPATH Timeout reached
  17. 深度理解面向对象的基础-抽象(一)
  18. 英特尔的Linux Xe内核图形驱动程序
  19. [系统工具]VMware Workstation 10.0 官方中文版 (附注册机/序列号)
  20. 如何成为虾皮的优选卖家-扬帆际海

热门文章

  1. mysql重做日志_MySQL-重做日志 redo log -原理
  2. vue.js java php_准吗?Java程序员喜欢AngularJS,PHP程序员喜欢Vue.js!
  3. 哈工大未来计算机院士,中国双一流大学拥有院士校友数排名,这是真实力!哈工大依然很强...
  4. linux日志文件备份,LINUX 自动备份程序日志(shell)
  5. php输出json到表格,PHP中把数据库查询结果输出为json格式
  6. bluetooth射频已关闭请打开bluetooth射频_希杰大功率射频放大器烧了维修诊断步骤...
  7. mysql数据库访问问题吗_#MySQL数据库无法远程访问的问题
  8. java自己实现ioc_springioc原理、springmvc项目分析、自己实现IOC
  9. java privilege的用法_java反射--注解的定义与运用以及权限拦截
  10. Linux 安装之U盘引导