一 hibernate中的实体规则

1.1 实体类创建的注意事项

  1. 持久化类提供无参数构造         --在调用instance()方法时默认调用空参构造
  2. 成员变量私有,提供共有get/set方法访问.需提供属性   ---Private String name 不叫属性 叫成员变量   --Get和set方法才叫属性
  3. 持久化类中的属性,应尽量使用包装类型
  4. 持久化类需要提供oid.与数据库中的主键列对应  --没有主键是无法到hibernate里面的
  5. 不要用final修饰class      hibernate使用cglib代理生成代理对象.代理对象是继承被代理对象.如果被final修饰.将无法生成代理.

1.2 主键类型

自然主键(少见)

表的业务列中,有某业务列符合,必须有,并且不重复的特征时,该列可以作为主键使用.

代理主键(常见)

表的业务列中,没有某业务列符合,必须有,并且不重复的特征时,创建一个没有业务意义的列作为主键

1.3 主键生成策略

代理主键

identity : 主键自增.由数据库来维护主键值.录入时不需要指定主键.

自然主键

assigned:自然主键生成策略. hibernate不会管理主键值.由开发人员自己录入.

increment 有线程安全问题,只在测试下用,在开发中不用

二 hibernate中的对象状态

2.1 对象分为三种状态

瞬时状态    

没有id,没有在session缓存中

持久化状态

有id,在session缓存中

游离|托管状态

有id,没有在session缓存中

2.2 三种状态的转换图

三 hibernate进阶-一级缓存

缓存:提高效率.hibernate中的一级缓存也是为了提高操作数据库的效率.

 提高效率手段1:提高查询效率

 提高效率手段2:减少不必要的修改语句发送

四 hibernate中的事务

4.1 事务

事务特性

a 原子性

c 一致性

i 隔离性

d 持久性

事务并发问题

1.脏读

2.不可重复度

3.幻|虚读

事务的隔离级别

读未提交- 123

读已提交 - 23

可重复读(mysql默认级别)-3

串行化 - 没有问题

4.2 hibernate隔离级别

知识点:如何在hibernate中指定数据库的隔离级别

在主配置文件中可以设置

4.3 管理事务

知识点2:在项目中如何管理事务

业务开始之前打开事务,业务执行之后提交事务. 执行过程中出现异常.回滚事务.

在dao层操作数据库需要用到session对象.在service控制事务也是使用session对象完成. 我们要确保dao层和service层使用的使用同一个session对象

在hibernate中,确保使用同一个session的问题,hibernate已经帮我们解决了. 我们开发人员只需要调用sf.getCurrentSession()方法即可获得与当前线程绑定的session对象

注意1: 调用getCurrentSession方法必须配合主配置中的一段配置

注意2:通过getCurrentSession方法获得的session对象.当事务提交时,session会自动关闭.不要手动调用close关闭.

 crm项目中

事务一般在sevice中处理.需要保证同一个session.这时要要在线程中取session

service层

 Dao

五 hibernate中的批量查询

5.1 HQL查询

hibernate Query Language(多表查询,但不复杂时使用)

Hibernate独家查询语言,属于面向对象的查询语言

基本查询

 条件查询

?号占位符

命名占位符

分页查询

5.2 Criteria查询

(单表条件查询)

Hibernate自创的无语句面向对象查询

基本查询

条件查询

分页查询

设置查询总记录数

5.3 原生SQL查询

(复杂的业务查询)

基本查询

返回数组List

返回对象List

条件查询

分页查询

源码

链接:https://pan.baidu.com/s/1GrAsjbFhyW4mENDqxI43hA 密码:qn9j

Hibernate-实体-对象状态-一级缓存-事务-查询的更多相关文章

  1. Hibernate 持久化对象和一级缓存

    关于如何手动创建Hibernate,Hibernate初了解已经介绍了,接下来了解持久化对象和一级缓存. Hibernate的持久化类有三种状态: 1.Transient瞬时态:持久化对象没有唯一标识 ...

  2. Hibernate学习笔记(二)—— 实体规则&对象的状态&一级缓存

    一.持久化类 1.1 什么是持久化类? Hibernate是持久层的ORM映射框架,专注于数据的持久化工作.所谓的持久化,就是将内存中的数据永久存储到关系型数据库中.那么知道了什么是持久化,什么又是持 ...

  3. Java实战之02Hibernate-02映射、一级缓存、实体对象状态

    五.映射基础 1.实体类采用javabean的编写规范 JavaBean编写规范: a.类一般是public的 b.有默认的构造方法 c.字段都是私有的 d.提供公有的getter和setter方法 ...

  4. java框架之Hibernate(2)-持久化类&主键生成策略&缓存&事务&查询

    持久化类 概述 持久化:将内存中的对象持久化到数据库中的过程就是持久化.Hibernate 就是用来进行持久化的框架. 持久化类:一个 Java 对象与数据库的表建立了映射关系,那么这个类在 Hibe ...

  5. Hibernate——(5)持久化对象和一级缓存机制

    一.对象的三种状态 1.暂时态:当对象刚创建,和Session没有发生任何关系时,当程序运行完就即刻消失,被称为暂时态. 2.持久态:当执行如下代码时,对象变为持久态 Emp e = new Emp( ...

  6. Hibernate实体对象三种状态

    Hibernate实体对象生命周期: 1. 自由状态(Transient,临时状态,瞬态) 在内存中自由存在,与数据库无关,未被Hibernate的Session管理 2. 持久状态(Persiste ...

  7. 1.1Hibernate持久化类和Hibernate持久化对象状态

    一.持久化对象po类 1.po定义 PO,是Persistent Object的缩写,是持久化类.PO是由PO=POJO+hbm映射配置组成. 2.通俗理解 PO类即持久化类,其实就是一个普通的Jav ...

  8. 在Hibernate框架中详谈一级缓存

    在学习Hibernate的过程中我们肯定会碰上一个名词---缓存,一直都听说缓存机制是Hibernate中的一个难点,它分为好几种,有一级缓存,二级缓存和查询缓存 今天呢,我就跟大家分享分享我所理解的 ...

  9. 使用Myeclipse为数据表创建hibernate实体对象

    hibernate是orm框架的一种,orm即Object Relational Mapping,对象映射关系,其主要作用是将数据库(mysql,mssql,oracle)的对象转换为具体编程语言(如 ...

随机推荐

  1. POJ 1269 /// 判断两条直线的位置关系

    题目大意: t个测试用例 每次给出一对直线的两点 判断直线的相对关系 平行输出NODE 重合输出LINE 相交输出POINT和交点坐标 1.直线平行 两向量叉积为0 2.求两直线ab与cd交点 设直线 ...

  2. mysql简单的操作

    启动数据库服务     net start mysql     停止数据库服务     net stop mysql      退出数据库      exit     保存操作及结果 将在命令行窗口中 ...

  3. UMP系统功能 分库分表

  4. 【默默努力】react-drag-grid

    先放项目地址:https://github.com/Bilif/react-drag-grid 项目运行效果 感谢无私开源的程序员 先看项目入口文件 //index.js import React f ...

  5. 容斥原理——hdu2204dfs深搜

    /* 枚举素数幂p 然后求k^p<=n 的 k的个数 因为 k^p1*p2==k^p2*p1,所以这两种情况是多算的,所以要进行容斥 减去两个质数幂相乘的,再加上三个质数幂相乘的 因为2*3*5 ...

  6. Java写爬虫代码时报org.apache.http.client.ClientProtocolException: URI does not specify a valid host异常的处理

    异常原因是url写错,导致无法解析 比如:这个报错就是因为写了两个“http:”导致该无法解析

  7. MYSQL批量创建表的存储过程

    因为业务需要,创建了100个表,但是这些表的结构都是一样的,作为程序员,就是要解决这种重复劳动.然而这种事情还要单独写个php脚本的话太麻烦了吧,所以就干脆学了一下直接用Mysql存储过程怎么实现: ...

  8. 反编译之jadx工具

    1.jadx是个开源 https://github.com/skylot/jadx 2.下载后cd到文件的根目录 然后输入命令 ./gradlew dist 之后会出现build文件进入/build/ ...

  9. Apollo Lake设计缺陷,避免使用它们

    很多经验告诉我们,在不大幅加电压超频的情况下,CPU很少会用坏.多数情况下电脑退役都是主板或其他部件故障,或是性能严重落后而不得不淘汰.但是如果CPU在制造阶段就存有缺陷的话,情况就不是这样了. 英特 ...

  10. java主函数参数传递args

    a.javaJava应用程序的主入口方法main(String[] args),表示该方法需要接收一个字符串数组类型的参数, 如果该参数不指定,agrs接收的是null. 程序:   public C ...