一 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. threading线程中的方法(27-11)

    t1.start() # 执行线程 t1.join() # 阻塞 t1.setDaemon(True) #守护线程 threading.current_thread() # 查看执行的是哪一个线程 t ...

  2. Java 10的10个新特性,将彻底改变你写代码的方式!

    Java 9才发布几个月,很多玩意都没整明白,现在Java 10又快要来了.. 这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK ...

  3. 18.scrapy_maitian

    ershoufang.py # -*- coding: utf-8 -*- import scrapy class ErshoufangSpider(scrapy.Spider): name = 'e ...

  4. Spring 泛型依赖注入(3)

    BaseService<T>:有RoleService和UserService两的子类 BaseRepepositry<T>:有UserRepository和RoleRepos ...

  5. scrpy--分布式爬虫

    原来的scrapy中的Scheduler维护的是当前机器中的任务队列(存放着Request对象以及回调函数等信息) + 当前的去重队列(存放访问过的url地址) 实现分布式的关键就是需要找一台专门的主 ...

  6. 18-1-函数中this的指向

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. TortoiseGit可能遇到Permission denied (publickey).

    1.检测是不是没设置公钥和私钥 2.公钥有没有添加到git账户里面去 3.检测如下图路径正确不正确

  8. reg命令详解

    reg命令是Windows提供的,它可以添加.更改和显示注册表项中的注册表子项信息和值. 1,reg add 将新的子项或项添加到注册表中  语法:reg add KeyName [/v EntryN ...

  9. C++ AOP手法

    1.代理模式 2.模版 3.NVI(non-virtual interface) 参考:https://www.cnblogs.com/qicosmos/p/4772389.html <effe ...

  10. 【转载】linux文件系统简介

    文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录.挂载基本原理.文件存储结构.软链接 ...