Hibernate笔记(二)主键生成策略、缓存、事务操作、关于查询的api

Hibernate主键生成策略详解及示例代码 在Hibernate中,主键生成策略是指在持久化对象到数据库时,如何为其生成唯一标识的主键。Hibernate提供了多种主键生成策略,每种策略都有其适用的场景。本文将详细介绍几种常用的主键生成策略,并提供相应的示例代码。以上是Hibernate中几种常用的主键生成策略及其示例代码。根据不同的数据库和需求,选择适合的主键生成策略可以提高系统的性能和效率。希望本文对你理解Hibernate中的主键生成策略有所帮助。如有任何疑问,请随时提问。 阅读详情

hibernate-day02

1.实体类编写规则

1.实体类的属性要是私有的

2.私有属性使用公开的set,get方法操作

3.要求实体类有属性作为唯一值(一般用id)

4.实体类属性建议不使用基本数据类型,而是使用包装类

(1)八个基本数据类型对应包装类

int-Integer char-Character …等等

2hibernate主键生成策略

hibernate要求实体类里面有一个属性作为唯一值,

hibernate主键生成策略有很多值:
increment
用于long、short、 或int类型,由Hibernate 自动以递增的方式生
成唯一标识符,每次增量为1。只有当没有其它进程向同一张表中插入
数据时才可以使用,不能在集群环境下使用。适用于代理主键。
identity
采用底层数据库本身提供的主键生成标识符,条件是数据库支持
自动增长数据类型。在DB2、MySQL、MS SQL Server、 Sybase 和
HypersonicSQL数据库中可以使用该生成器,该生成器要求在数据库中
把主键定义成为自增长类型。适用于代理主键。
sequence
Hibernate根据底层数据库序列生成标识符。条件是数据库支持序
列。适用于代理主键。
native
根据底层数据库对自动生成表示符的能力来选择identity 、
sequence、hilo 三种生成器中的-种,适合跨数据库平台开发。适用于
代理主键。
uuid
Hibernate采用128位的UUID算法来生成标识符。该算法能够在
网络环境中生成唯一的字符串标识符,其UUID被编码为一一个长度为
32位的十六进制字符串。这种策略并不流行,因为字符串类型的主键
比整数类型的主键占用更多的数据库空间。适用于代理主键。
assigned
由java程序负责生成标识符,如果不指定id元素的generator属性,
则默认使用该主键生成策略。适用于自然主键。

生成策略值 uuid

(1)使用uuid生成策略,实体类id属性类型 必须 字符串类型

3.实体类操作

(1)crud

添加操作:

  User user = new User();
        user.setUname("小脑斧");
        user.setAddress("河南省南阳市西峡县");
        user.setPassword("zahzha");
        session.save(user);

通过id查询

 //第四步通过id查询
        User user = session.get(User.class, 1);
        System.out.println(user);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Hg9u9Zr-1597127787721)(file:///C:\Users\Lenovo\AppData\Roaming\Tencent\Users\1605367528\QQ\WinTemp\RichOle{NV26CV%MWX@N%[EMW$~{}8.png)]

更新操作

首先要先查询再修改,先通过id查询之后再进行修改

 User user = session.get(User.class, 1);
       System.out.println(user);

       //查完再改
       user.setUname("张小娴");
       user.setAddress("郑州市");
       session.update(user);

在这里插入图片描述

删除操作

在这里插入图片描述

3 实体类对象状态

实体类对象有三种状态

瞬时态
对象里面没有id,对象与session也没有关系
在这里插入图片描述

2,持久态、
对象里面有id ,对象与sassion有关系
在这里插入图片描述

托管态
对象有id ,但是对象与session没关系
在这里插入图片描述saveOrUpdate()方法
在这里插入图片描述在这里插入图片描述在这里插入图片描述

4.hibernate的一级缓存

缓存:

1 数据存到数据库里面,数据库本身是文件系统,使用流方式操作文件效率不是很高。
(1)把数据存到内存里面,不需要使用流方式,可以直接读取内存中数据
(2)把数据放到内存中,提供读取效率

hibernate缓存

1 hibernate框架中提供很多优化方式,hibernate的缓存就是一个优化方式

2 hibernate缓存特点:
第一类 hibernate的一级缓存
(1)hibernate的一级缓存默认打开的
(2)hibernate的一级缓存使用范围,是session范围,从session创建到session关闭范围
(3)hibernate的一级缓存中,存储数据必须 持久态数据

第二类 hibernate的二级缓存
(1)目前已经不使用了,替代技术 redis
(2)二级缓存默认不是打开的,需要配置
(3)二级缓存使用范围,是sessionFactory范围

验证一级缓存存在

1 验证方式
(1)首先根据uid=1查询,返回对象
(2)其次再根据uid=1查询,返回对象
在这里插入图片描述
第一步执行get方法之后,发送sql语句查询数据库
第二个执行get方法之后,没有发送sql语句,查询一级缓存内容
在这里插入图片描述

一级缓存执行过程

在这里插入图片描述在这里插入图片描述

5.hibernate的事务操作

(1)事务代码的书写规范

事务相关概念

1 什么是事务

在数据库操作中,-项事务(Transaction) 是由- -条或多条操作数据库的SQL语句组成的一一个
不可分割的工作单元。当事务中的所有操作都正常完成时,整个事务才能被提交到数据库中,如果
有一项操作没有完成,则整个事务会被回滚。
其实事务总结起来理解为:逻辑上的一组操作,组成这组操作的各个单元,要么一起成功,要
么一起失败。

2 事务特性

ACID原则,原子性,一致性,隔离性,持久性
在这里插入图片描述

3 不考虑隔离性产生问题(事务的并发问题)

(1)脏读 一个事务读取到另一个未提交的事务
(2)不可重复读 一个事务读取到另一个已经提交的update的数据,导致多次查询结果不一样
(3)虚读 一个事务读取到另一个事务已经insert的事务的数据,导致多次查询的结果不同

4 设置事务隔离级别

(1)mysql默认隔离级别 repeatable read
Hibernate事务代码规范写法
1 代码结构
try {
开启事务
提交事务
}catch() {
回滚事务
}finally {
关闭
}

@Test
	public void testTx() {
		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction tx = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			//开启事务
			tx = session.beginTransaction();
			
			//添加
			User user = new User();
			user.setUsername("小马");
			user.setPassword("250");
			user.setAddress("美国");
			
			session.save(user);
			
			int i = 10/0;
			//提交事务
			tx.commit();
		}catch(Exception e) {
			e.printStackTrace();
			//回滚事务
			tx.rollback();
		}finally {
			//关闭操作
			session.close();
			sessionFactory.close();
		}
	}

Hibernate绑定session

1 session类似于jdbc的connection,之前web阶段学过 ThreadLocal
在这里插入图片描述
2 帮实现与本地线程绑定session

3 获取与本地线程session
(1)在hibernate核心配置文件中配置
在这里插入图片描述
(2)调用sessionFactory里面的方法得到
在这里插入图片描述

4 获取与本地线程绑定session时候,关闭session报错,不需要手动关闭了在这里插入图片描述

6.hibernate的其他api(查询)

(1)Query

1 使用query对象,不需要写sql语句,但是写hql语句
(1)hql:hibernate query language,hibernate提供查询语言,这个hql语句和普通sql语句很相似
(2)hql和sql语句区别:

  • 使用sql操作表和表字段
  • 使用hql操作实体类和属性

2 查询所有hql语句:
(1)from 实体类名称

3 Query对象使用
(1)创建Query对象
(2)调用query对象里面的方法得到结果

 @Test
   public void test(){
        try{
        //与本地绑定的session
            sessionFactory =HibernateUtil.getSessionFactory();
        session=    HibernateUtil.getSessionObject();
        transaction=session.beginTransaction();

        //创建Query对象
            Query query = session.createQuery("from User");

            //第二步调用query对象  得到结果
            List<User> list = query.list();
            for (User user : list) {
                System.out.println(user);
            }
//提交
            transaction.commit();
        }catch (Exception e){
            e.printStackTrace();
            //回滚
            transaction.rollback();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }

(2)Criteria

1 使用这个对象查询操作,但是使用这个对象时候,不需要写语句,直接调用方法实现

2 实现过程
(1)创建criteria对象
(2)调用对象里面的方法得到结果
在这里插入图片描述

(3)SQLQuery

1 使用hibernate时候,调用底层sql实现

2 实现过程
(1)创建对象
(2)调用对象的方法得到结果

返回list集合每部分是数组
在这里插入图片描述
返回list中每部分是对象形式

在这里插入图片描述

Hibernate主键生成策略总结 NULL 博文链接:https://alpha2009.iteye.com/blog/1074750 立即下载

相关推荐

ZYNQ实战:如何用AXI-stream FIFO解决跨时钟域数据同步难题(附完整代码)

本文深入探讨了在ZYNQ项目中,如何利用AXI-Stream FIFO有效解决PS与PL之间的跨时钟域数据同步难题。文章详细分析了异步FIFO的架构设计、关键配置参数,并提供了PS端软件策略与PL端逻辑设计的完整代码示例,旨在帮助开发者构建稳定可靠的数据流通道,优化系统性能。

nginx7reverse的博客 751

hibernate主键生成策略

主键生成策略 一、Hibernate标识生成策略 关于映射文件的问题下次再介绍,这次主要总结hibernate常用主键生成策略。 (1)increment 对主键值采取自动顺序增长的方式生成新的主键,值默认从1开始。 原理:在当前应用实例中维持一个变量,以保存当前最大值,之后每次需要生成主键值的时候将此值加1作为主键.不依赖于底层的数据库,因此所有的数据库都可以使用 缺点:通过i...

鄧旧人博客 717

LoRa模块选型指南:正点原子ATK-LORA-01与SX1278芯片深度评测(含实测距离/功耗数据)

本文深度评测了正点原子ATK-LORA-01与SX1278芯片的性能表现,通过实测数据展示其在复杂环境中的通信距离与功耗表现。特别适合智慧农业、工业监测等物联网应用场景,提供详细的配置指南和优化技巧,帮助开发者实现高效、低功耗的LoRa通信解决方案。

weixin_29191081的博客 286

hibernate之主键生成策略

一、主键类型1.自然主键(主键本身就是表中的一个字段,实体中一个具体的属性)表中已经具有某字段,并且该字段具有业务含义作为主键,称之为自然主键。 例如:在person表中的身份证号,既是唯一的,又可以单独标识一个person 2.代理主键(主键不是实体中某个具体的属性,而是一个不相关的字段)表中原本不存在的字段,且不具备业务含义的字段作为主键,称之为代理主键。更合理的方式是使用代理主...

aioupi5255的博客 257

ArcMap学习笔记(三)地图数字化

地图数字化前言地图数字化实现步骤1.加载地形图2.新建要素图层3.开启编辑环境4.设置捕捉环境5.选择数字化图层6.数字化控制点7.数字化等高线8.数字化图幅边框9.保存数字化成果总结 前言 使用软件:ArcMap10.4.1中文版 如果出现侵权,请在评论留言,我会及时删除,谢谢。 地图数字化 空间数据采集(输入)是将现有的地图、外业观测成果、航空像片、遥感图片数据、文本资料等转换成GIS可以直接...

JayWang博客 1万+

arcgis导出自身相交数据

今天接到一个客户需求,一份面文件,里面有好多元素是两两相交甚至是三个相交的,现在要把这些重叠部分提取出来,并且把相交部分的原始要素的名称也保留在字段中,也就是说名称这个会有好多个名称字段,如果两个要素相交那就是前两个名称字段有值,后面的为空,如果是三个要素相交,那么输出的这个要素就是前三个名称字段有值,后面的为空,嗯,这里也不太确定会出现多少个名称字段,这个需要依照数据来定。 这是原始数据,...

miaowumi92的博客 6779

Hibernate中常见的主键生成策略

主键生成策略 1、主键的分类:见链接:https://blog.csdn.net/pipizhen_/article/details/107851361 主键应该设置,和业务不相关的自然数,不要拿着人员的身份证做主键,拿着银行卡号做主键,因为业务可能会改动,而主键不能随便改。 在实际开发中一般不允许用户手动设置主键,一般将主键交给数据库,手动编写程序进行设置。在Hibernate中为了减少主键的编写,提供了很多种主键的生成策略。 2、常见的主键生成策略: (1)increment 使用Hibernate中

pipizhen_的博客 1215

YOLO26改进策略【卷积层】| 引入注意力卷积模块RFAConv,关注感受野空间特征 助力YOLO26精度提升

RFAConv:创新空间注意力和标准卷积运算感受野空间特征是针对卷积核设计的,根据卷积核大小动态生成。以3×3卷积核为例,它由非重叠滑动窗口组成,每个窗口代表一个感受野滑块。

Limiiiing的博客 187

Hibernate下如何更新表的主键?

Model层: public class systemrun { private Integer run; private String name; private String detail; public Integer getRun() { return run; } public void setRun(Integer run) { this.run = run;

li898445911a的专栏 1546

Dify平台隐患url:/console/api/remote-files/upload暴露高危漏洞,配置nginx htpasswd模块认证机制屏蔽解决

内部网络探测: 攻击者可通过SSRF扫描内网服务云元数据访问: 可能访问AWS/Aliyun/腾讯云等元数据服务服务端请求伪造: 以服务器身份发起任意HTTP请求。

CN_Eden 1304

【深度学习新浪潮】如何上手DINO v3:Meta新一代视觉大模型实战指南

自定义数据集类(适配本地/公开数据集)# 去除batch维度# 构建数据加载器# 定义分类模型(冻结预训练层,仅训练分类头)self.classifier = nn.Linear(dino_model.config.hidden_size, num_classes) # 分类头global_feat = outputs.global_attention_pool # 取全局特征# 初始化模型# 冻结预训练层(仅训练分类头)# 定义损失函数和优化器。

专注:太空算力、AI infra、异构调度、大模型成本工程 487

Hibernate框架(二):主键生成策略&一级缓存&事务管理

文章目录  1、持久化类的编写的规则   2、主键生成策略-生成策略概述   3、持久化类的三种状态-认识三种状态   4、持久化类的三种状态-三种状态的转换   5、Hibernate的一级缓存-一级缓存概述   6、Hibernate的一级缓存-一级缓存的快照区   7、Hibernate的事务管理-事务的回顾   8、Hibernate的事务管理-线程绑定的Session   9、Hibernate的其他API

oZuoShen123的博客 511

SOUL.md 人格定制的 7 个高阶技巧:Hermes Agent 精准控制 AI 行为模式

揭示 SOUL.md 的本质是行为契约而非人格设定,介绍7个围绕边界约束的高阶技巧,包括用上下文锚点(INPUT SCOPE/OUTPUT TARGET/CONSTRAINTS)替代角色描述、动态渲染锚点适配CI流程等,显著降低token消耗与人工review耗时。

weixin_42520239的博客 247

Hibernate笔记02_主键生成策略_一级缓存_事务管理

0. 结构图 1. 持久化类的编写规则 1.1 持久化和持久化类 持久化:将内存中的一个对象持久化到数据库的过程,Hibernate框架就是用来进行持久化的框架。 持久化类:一个Java对象与数据库的表建立了映射关系,那么这个类在Hibernate中称为持久化类。 持久化 = Java类 + 映射文件 1.2 持久化类的编写规则 对持久化提供一个无参的构造方法:HIbernate底层...

itzhouq的博客 345

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Hibernate(二)主键生成策略--一级缓存--事务管理

文章目录Hibernate的持久化类的编写规则Hibernate的主键生成策略Hibernate的持久化类的三种状态Hibernate的一级缓存Hibernate的事务管理配置线程绑定的SessionHibernate的其他的API Hibernate的持久化类的编写规则 无参数构造 属性私有 属性尽量使用包装类 提供一个唯一OID与主键对应 不要使用final修饰 Hibernate的主键生...

最白の白菜的博客 228

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

hibernate之持久化类,主键生成策略,事务,缓存,查询api(02)

学习地图持久化类 主键生成策略 持久化对象的三种状态(★持久态) 一级缓存(快照机制) 事务 查询的api★★★持久化类:概述:javabean + 映射文件编写规范:必须是一个公共的具体的类(public class) 必须有一个无参构造器 字段私有,必须提供公共的访问字段的方法(get和set) 必须有一个oid属性和主键对应 字段尽量使用包装类修饰 类尽量不要使用final

卡式优雅的博客 331

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

(四)Hibernate中的主键生成策略&一级缓存&事务管理&其它API

Hibernate中的主键生成策略&amp;amp;amp;amp;amp;amp;amp;amp;一级缓存&amp;amp;amp;amp;amp;amp;amp;amp;事务管理 一、主键生成策略 二、一级缓存 三、事务管理

sage201551的博客 268

Hibernate之进阶1——主键生成策略和事务管理

一、持久化类的编写规则 1、什么是持久化? 将内存中的数据永久保存到关系型数据库中 2、什么是持久化类? java中的类和数据库表建立了映射关系 3、持久化类的编写规则 无参构造方法 属性需要私有,对私有属性提供公共的set和get方法 属性精良使用包装类型(防止基本数据类型默认值为0造成的问题 要有一个唯一标识OID与表的主键对应 不能使用ffinal修饰(延迟加载代理对象继承了持久化类) ...

一个成长中的程序员,期待用技术的眼光生活 335

Hibernate主键生成策略

文章目录持久化类的编写规则持久化类的概述什么是持久化类持久化类的编写规则持久化类的编写规则主键生成策略主键的分类自然主键代理主键主键的生成策略Hibernate的主键生成策略持久化类的三种状态瞬时态持久态托管态区分三种状态对象缓存的概述什么是缓存Hibernate的一级缓存Hibernate的其它API 持久化类的编写规则 持久化类的概述 什么是持久化类 持久化:将内存中的一个对象持久化数据库中...

qq_42216575的博客 178

hibernate的主键生成策略包括那些

hibernate 主键生成策略有三种:序列 自增 通用 1、序列 sequence 只能在oracle 和 DB2中使用 2、自增 identity 智能在sqlserver 和 mysql 中使用,同时建表的时候,设置列 为 auto increment。 3、通用 native mysql 就用

柠檬不萌 1726

Java中hibernate 主键类型 主键生成策略 三种状态 缓存与快照以及查询

实体类规范 1.提供无参构造方法 2.成员变量私有化 提供set/get方法 3.基本数据类型尽量使用包装类型(例如double 的 用Double) 4.实体中必须要提供一个与表中的主键对应的属性 id hibernate是通过主键来区别对象是否相同 5.不要使用final修饰实体类(代理对象是要继承该类的)主键类型 自然主键 输

SuPrEeMm的博客 615

【教程】Hibernate 基本操作和事务

实体类编写规则 ☆ 类似于JavaBean,实体类属性是私有的 私有属性通过公开的get和set方法编辑 要求(强制)实体类有属性作为唯一值(主键),通常用id值 实体类属性建议(非强制)不使用基本数据类型,使用对应包装类 好处:Java 有8个基本数据类型,都有其对应的包装类,使用包装类可以使用NULL值,而基本数据类型不可以 HIbernate 主键生成策略 Hibernate 要求实体...

不想打代码 433

hibernate笔记(二)

hibernate笔记二1. Hibernate持久化类和对象标识符1.1 Hibernate持久化类1.1.1 什么是持久化类1.1.2 持久化类编写规范1.2 Hibernate对象标识符(OID)1.3 Hibernate主键生成策略2. Hibernate一级缓存和对象状态2.1 Hibernate一级缓存2.1.1 Session缓存2.1.2 快照机制2.2 Hibernate对象...

weixin_44683239的博客 702

Hibernate缓存及查询策略研究

公司现在有一个比较旧的SSH项目,使用hibernate作为数据访问层框架。因为表之间的关系比较复杂,所以在类与类之间配置了很多的一对多,多对多关联关系,在查数据的时候会查出很多不需要的数据,导致了查询性能的低下,一次简单的分页查询却要耗时一秒以上。 不过,Hibernate也提供了一些方式来提高多表查询性能:可以通过查询策略来优化生成的sql语句,也可以通过缓存来减少sql的生成。下面就介绍下我对查询及缓存策略如何优化查询性能的一些测试与研究。 查询策略 先介绍一下查询策略,指的是Hibernate在查询

Yaber的博客 676

Hibernate是如何处理事务的?请描述一下Hibernate的事务管理。Hibernate中的缓存机制是怎样的?如何配置和使用缓存?

一级缓存是Hibernate为每个Session维护的缓存,它是事务范围的缓存,即每个Session都有自己的一级缓存。当Session进行一些数据库操作时(例如保存、更新、删除、加载等),Hibernate会首先在一级缓存中查找是否存在相应的对象,如果存在则直接返回,否则才进行数据库查询。这些操作都是在事务的上下文中进行的,如果事务被回滚,那么这些操作对数据库的影响将被撤销。一级缓存的生命周期和Session的生命周期一致,当Session关闭或清理时,一级缓存中的对象也会被清除。

Aaron的博客 1418

Hibernate一级缓存和二级缓存详解

一、一级缓存二级缓存的概念解释 (1)一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个 session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库,取数据。 (2)二级缓存就是SessionFactory级别的缓存,顾名思义,就是查询的时候会把查询结果

徐刘根的博客 2万+
上一篇: 设计模式之代理模式 静态代理、动态代理、Cglib代理模式
下一篇: Jquery随记
·小脑斧·
博客等级 码龄7年 10粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值