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. maven:Fatal error compiling: 无效的目标 发行版: 1.8 -> [Help 1]

    https://blog.csdn.net/kkgbn/article/details/72777750

  2. 前端SEO与爬虫与SSR(Server Side Render)

    讲真,之前没考虑过这个问题.因为项目原因,自己用python的一些工具,爬取了淘宝.京东.百度等的一些图片和图片名称之类的信息.以为爬虫只是解析html文本,然后提取关键字,保存自己想要的信息即可,或 ...

  3. 【转】使用Eclipse,将鼠标放在相应方法或字段等元素上时,无法显示提示

    使用Eclipse编写java代码时,将鼠标放在相应方法或字段等元素上时,会有对应的说明或提示. 不过,常出现下面的问题: Note:An exception occurred while getti ...

  4. 升级GCC以支持C++11

    本文主要介绍在Linux系统下,如何升级GCC以支持C++11.目前来看GCC是对C++11支持程度最高最多的编译器,但需要GCC4.8及以上版本.  本文使用操作系统:Centos 6.4 Desk ...

  5. python3 模拟鼠标和键盘操作

    1. 安装pyperclip pip install pyperclip 使用方法复制 pyperclip.copy("hello world") 粘贴 pyperclip.pas ...

  6. 权限模型AGDLP

    关于权限模型,认真学习下AD+FS应用在企业中,使用AGDLP模型,即可. AD是微软最牛逼的设计之一.

  7. 关于OllyDbg的一些设置

    以下是以OD x86 v2.01的设置方法, 其他版本可能略有区别 一 设置字体与颜色 0 OD的字体与颜色的设置机制是这样的, OD给你预设了几组颜色,字体项, 你如果觉得预设的不满意, 可以修改这 ...

  8. Tomcat修改service.xml性能调优 增加最大并发连接数

    详细配置: <Connector executor="tomcatThreadPool"               port="80" protocol ...

  9. asp代码写的,微信会员报名转发分享带上下级和邀约人关系并且能微信支付asp编号的

    昨天晚上应一个客户要求写了一套代码,实现的功能是: 在微信公众号上注册会员,获取用户的头像和微信名称,进入会员中心报名,报名成功成功后,他如果转发链接给别人,别人打开后则成为他的下级,上面那个算是一个 ...

  10. angular4中引入quill editor

    1. npm install --save-dev @types/quill  安装types 2.npm install ng2-quill-editor --save 安装quill 3.配置ts ...