1.1对象的持久化

            对象持久化是指将内存中的对象保存到可永久保存的存储设备中(如磁盘)的一种技术。(hibernate是通过id来管理对象)

1.2怎样实现持久化

1 对象序列化

2 JDBC

3 ORM 对象关系映射

4 JPA框架

5 hibernate

关系:ORM是一种思想,JPA是通过JAVA语言来实现这种思想,不过JPA只是一个接口,其中hibernate是具体实现这一接口的方法之一

2.1.1 sessionfactory接口

  重量级对象,单例的(可以按照单例来用) 线程安全的。不需要手动关闭并且系统开销很大,等应用程序结束时自然关闭

2.1.2 session(重点)

一个线程不安全的多例的轻量级对象。
session的获取
sessoinFactory.openSession() //创建一个新的session,可以不在事务内执行,无需注册,必须手工关闭session
sessionFactory.getCurrentSession()//获取当前进程的session对象, 查询必须再事务内执行,需要注册session的运行环境,自动关闭 session的CURD 这里借鉴这个:

https://www.cnblogs.com/MindMrWang/p/8143984.html

3.1.1 hibernate常用的内置主键生成策略

      (1)increment生成策略
该策略是hibernate自己在维护主键的值。当准备在数据库表中插入一条新记录时,首先从数据库表中获取当前主键字段的最大值,然后在最大值的基础上加1,作为新插入记录的主键值。
用其生成的主键字段对应的属性类型可以使long,short,int及其封装的类型,在高并发下不能使用。(看来用处不大)
(2)identity
该策略使用数据库自身的自增长来维护主键值
(3)sequence
(4)native
他可以根据使用的数据库来选择一种方式(identity或者sequence)
(5)UUID(需要知道了解,会用)通过算法生成的ID全球唯一。但是生成的是32位长度的字符串(按字符来说)占内存

4.1持久对象状态管理

         1.对象状态:一般是指对象的一组属性的值(用于存放对象的存储介质有三个:普通内存,session缓存,数据库)
(1) 瞬时态:transit状态,对象在内存中存在,但DB中无记录,与session无关,是个过度的状态
(2)持久态:persistent状态,在内存中存在,DB中有记录,与session相关,在session中有对象的副本
(3) 游离态:detached状态,在内存中存在,在DB中有记录,与session无关。
(4) 无名态:在内存中不存在,但在DB中有记录,与session无关。
2.状态转换图

5.1.1单表查询(HQL语句)

         1.Query接口   hibernate进行HQL查询的接口,支持动态绑定的功能。使用session对象的createQuery方法可以获取Query对象。(HQL是面向对象的查询语言)
2.SQLQuery接口
3.Criteria接口

5.1.2HQL的动态参数赋值(在Query查询时:setInteger()等方法已过时)

                   参考这里的:

https://blog.csdn.net/m0_37922841/article/details/80560127

@Test
public void test03_1() { //动态参数赋值 Session session = HbnUtils.getSession();
try {
//开启事务
session.beginTransaction();
//执行操作 String hql="from Student where age>?0 and score<?1";//hql是面向对象的,这里的Student是类名,并且这里并不需要封装直接就是对象
Query query=session.createQuery(hql);
query.setParameter(0, 27);
query.setParameter(1, 21.0);
List<Student> list = query.list();
for(Student student : list) {
System.out.println(student);
}
//事务提交
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
//事务回滚
session.getTransaction().rollback();
}
}
@Test
public void test03_2() { //动态参数赋值,别名的方式 Session session = HbnUtils.getSession();
try {
//开启事务
session.beginTransaction();
//执行操作 String hql="from Student where age>:age and score<:score";//hql是面向对象的,这里的Student是类名,并且这里并不需要封装直接就是对象
Query query=session.createQuery(hql);
query.setParameter("age", 27);
query.setParameter("score", 21.0);
List<Student> list = query.list();
for(Student student : list) {
System.out.println(student);
}
//事务提交
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
//事务回滚
session.getTransaction().rollback();
}
}

6.1 关联关系映射

         1.什么是关联关系映射:关联映射是将数据库中的表映射成与之相对应的对象,当你对这个对象进行操作的时候,Hibernate会对数据库中对应的表执行相应的操作,你对该实体的操作实际上就是在间接的操作数据库中与之相对应的表。

hibernate的开始的更多相关文章

  1. hibernate多对多关联映射

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  2. 解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用

    问题: Springboot启动报错: Caused by: org.springframework.beans.factory.BeanCreationException: Error creati ...

  3. hibernate多对一双向关联

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  4. Hibernate中事务的隔离级别设置

    Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下

  5. Hibernate中事务声明

    Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...

  6. spring applicationContext.xml和hibernate.cfg.xml设置

    applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...

  7. [原创]关于Hibernate中的级联操作以及懒加载

    Hibernate: 级联操作 一.简单的介绍 cascade和inverse (Employee – Department) Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似 ...

  8. hibernate的基本xml文件配置

    需要导入基本的包hibernate下的bin下的required和同bin下optional里的c3p0包下的所有jar文件,当然要导入mysql的驱动包了.下面需要注意的是hibernate的版本就 ...

  9. Maven搭建SpringMVC+Hibernate项目详解 【转】

    前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...

  10. 1.Hibernate简介

    1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发;           b.大大减少代码量;           c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...

随机推荐

  1. 360软件的木马查杀、漏洞修复等组件不能使用,提示runtime error

    一.故障现象:1.360软件的木马查杀.漏洞修复等组件不能使用,提示runtime error2.暴风影音等很多软件不能正常使用3.设备管理器不能打开,提示“MMC 不能打开文件”4.部分https安 ...

  2. puzz: 图片和表单上传的不一致问题

    1.    方向1 用户提交表单, 图片和表单同步上传.(由同一服务器处理, 服务器压力大. 没有分离) 2.    方向2 图片和表单分开上传. 如图片访问ftp,表单提交后台(图片和后台分离) 2 ...

  3. Linux下MySQL编码的修改

    默认登录mysql之后可以通过SHOW VARIABLES语句查看系统变量及其值. mysql> show variables like '%character%';   说明:以下是在Cent ...

  4. JNDI是什么

    参考文章:---为什么 追本溯源 http://www.cnblogs.com/xx0405/p/5332198.html jndi在Spring和tomcat下的使用: https://www.cn ...

  5. [UE4]镜像

    一.这是一个右手模型,通过镜像可以得到一个左右模型. 二.通过上图分析,镜面是X轴和Z轴形成的一个面,Y轴与XZ面垂直,因此就是镜像Y轴,将模型的Transform.Scale.Y设置为-1,即可得到 ...

  6. centos上 小程序部署 nginx+https+ssL 提示错误:对应的服务器 TLS 为 TLS 1.0 ,小程序要求的 TLS 版本必须大于等于 1.2

    解决办法: 1.nginx版本必须是1.0.6以上 2.修改配置文件,修改server内的ssl_protocols内容,增加TLSv1.2 3.重启nginx. ./nginx -s reload ...

  7. 使用pgrouting进行最短路径搜索

       PgRouting是基于开源空间数据库PostGIS用于网络分析的扩展模块,最初它被称作pgDijkstra,因为它只是利用Dijkstra算法实现最短路径搜索,之后慢慢添加了其他的路径分析算法 ...

  8. [php]php设计模式 (总结)

    转载自[php]php设计模式 (总结) 传统的23种模式(没有区分简单工厂与抽象工厂) http://www.cnblogs.com/bluefrog/archive/2011/01/04/1925 ...

  9. Linux系统中的计划任务

    在系统的工作管理中,我们经常会有需要去告诉电脑某些特定的时间执行一些操作,比如定时提醒工作人员需要做什么事情,或者在每天凌晨进行文件备份等等.这就需要某些命令来达成计划任务. 计划任务可以大体上分成两 ...

  10. egret编译 FATAL ERROR: CALL_AND_RETRY_0 Allocation failed process out of memory解决

    egret 白鹭编译时异常提示: FATAL ERROR: CALL_AND_RETRY_0 Allocation failed process out of memory.  编译时内存溢出, 因为 ...