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. GP中Geoprocessor.Execute(string name, IVariantArray parameters, ITrackCancel trackCancel)

    在做一个项目的过程中,发现GP运算方法 Execute(string name, IVariantArray parameters, ITrackCancel trackCancel) 与Execut ...

  2. 带宽怎么算---Gbit/s

    带宽怎么算---Gbit/s 信息来源: 计算方法: 带宽的实际应用:

  3. 采用Anaconda平台调用pymc3时出现错误的解决方法

    提示:(1)module 'theano' has no attribute 'gof',c++编辑出现错误 (2)stdio.h file not found 解决方法:(1)在终端中输入 xcod ...

  4. JavaScript问题——在浏览器中的offsetLeft/offsetWidth等属性是什么?

    原文链接http://www.cnblogs.com/xiaohuochai/p/5828369.html https://blog.csdn.net/u012532033/article/detai ...

  5. 【坑】linux目录软连接的相关操作--很容易误操作

    写一下文档,记录自己工作中的重大事故,警醒自己以后别犯错. 1)目录不能进行硬连接,只能进行软连接,也就是 ln命令必须加上 -s 参数,如下: [root@ALIYUN:~]#ln /srv/bak ...

  6. CBSN NEWS

    https://www.cbsnews.com/video/fatal-crossing/

  7. 适用于nodercms的打包构建脚本

    背景 最近自己用nodercms搭建了一个简单的博客系统,用户发布一些自己谁便谢谢的文章.感谢nodercms团队,这个cms轻量易用,用于做个人博客太方便了.开发了博客系统,肯定设计到部署到AWS或 ...

  8. 删除N天前的文件(夹)与拷贝文件到共享盘的批处理

    rem ======= 删除目录 7天前目录 ========= forfiles /P "E:\Folder" /S /D -7 /C "Cmd /C If @isdi ...

  9. dis集群研究和实践(基于redis 3.0.5) 《转载》

    https://www.cnblogs.com/wxd0108/p/5798498.html 前言 redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用.现在的 ...

  10. .net core2 api

    [Produces("application/json")][Consumes("application/json")][Consumes("appl ...