hibernate

本文详细介绍了 Hibernate 的核心概念,包括 JavaBean、EJB 和 POJO 的区别,持久化对象的状态转换方法,以及 ThreadLocal 在多线程环境中的使用。此外,还深入探讨了 HQL 查询语言的特点与使用技巧,以及 Hibernate 的性能优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hibernate
是什么:轻量级JAVAee应用的持久层解决方案。


1,javabean:遵守JAVAbean规范编写的java类:(java类是public的类 属性私有的 有getset方法 瞒住序列化)。编写javabean的目的是为web容器提供可重用的组件,用于封装表现层页面数据的显示。
2,ejb:在企业应用中,需要可伸缩的性能和事物,安全机制,这样才能保证企业级应用的需求,ejb就是在javabean规范的基础上提出的更高的要求,它比javabean更复杂,功能更强大,它是javaee的核心技术。
3,pojo(简单的java对象):在企业级应用中发现使用ejb异常繁琐和复杂,于是提出pojo的概念,目的是为了避免和ejb混淆所创建的简称,它比javabean和ejb更纯粹和简单。只有属性和getset方法,只能用于封装数据,作为数据存储的载体。
4,entity(实体类):他是用于必须存储信息和行为建模的类,一般与数据库表相对应,需要注意的是实体类设计三层架构的每一层。

po(持久化对象,能保存在数据库中的对象)=pojo+xml 映射文件



ThreadLocal(唯一资源时候不能用)
他不是一个线程,而是线程的一个本地化对象,当线程中的对象使用threadLocal维护变量时,threadLocal 为了每一个使用该变量的线程分配一个独立的变量副本,所以每一个线程都可以独立的使用自己的副本,而不会影响其他线程所对应的副本。从线程的角度看,这个变量就像是线程的本地变量

ThreadLocal与线程同步机制比较
1,ThreadLocal 是另一个角度来解决多线程并发访问。它为每个线程提供了一个独立的变量副本,从而也就没有必要对该变量进行同步了,它提供了线程安全的对象封装,在编写多线程代码时。可以吧不安全的变量封装进ThreadLocal。


对于多线程资源共享的问题,
线程同步机制采用了以:时间换空间的方式,即访问串行化,对象共享化:。
而ThreadLocal采用 :以空间换时间既 访问并行化对象对象化:


hibernate 持久化对象状态
1,瞬态 :对象由new操作创建的,没有与session 有关联方法 瞬态对象不会被持久化到数据库。
2,持久化状态: 持久化实例在数据库中有对应的记录,并拥有一个持久化标识。持久化对象必须指定session关联,不用手动更新数据库
3,脱管状态 :某个实例曾今处于持久化状态,但随之与关联的session被关闭了,该对象就变成了脱管状态,脱管对象的应用依然有效,对象可以继续修改,如果重新连接session ,该对象将重新转换为持久化状态,而托管状态期间改动也被写入数据库。


瞬态转化为持久化对象 save():(有返回值返回主键) persist():(没有返回值) 当两个参数时代表增加主键。

持久化操作 查询数据方法:load(延时加载:用的时候才会去真的去取)没有查询到有记录就会抛异常 get(没有延时加载)没查到记录就会返回null

脱管状态转为持久化状态 update()(脱管状态时候) updateOrSave()(不知道是否是脱管状态时候) merge()(只是将数据同步,还是脱管状态:游戏存档)lock()()

持久化转为瞬态 删除数据 delete()对象还在

关联映射:    单向关联:只需要单向访问关联1,单向一对一,单向一对多,单向多对一,单向多对多
单向多对一:公交车和人,班级和学生。



 双向关联:关联的两端可以互相访问1,双向一对一,双向一对多,双向多对多

性能优化:对于一对多关联,最好使用双向关联,以减少生成sql语句数量提高性能。


级联默认不开启属性对应session中的持久化操作。all代表开启所有级联none表示不开启



hibernate HQl查询:
hql是一种面向对象的查询语言。
sql的操作对象是*数据表*,列和记录。
hql的操作对象是*类*,*实例*和*属性*。
1,from子句:
最简单的hql语句,后面紧跟持久化类的类名。
hql语句本身不区分大小写,但是hql语句中所使用的包名,类名,实例名,属性名,都要区分大小写。

2,select子句:
select子句用于选择持久化类的实例或者持久化类指定的属性。


3,where子句:
用于缩小范围,筛选选中的结果
预处理:hql两种占位符1,英文问号(?)2,使用冒号+名字(:name)
query有两个方法支持查询实现分页;
setFirstResult(int firstResult):设置返回的结果集从第几条记录开始
setMaxResults(int maxResults)设置本条查询结果集的数量


4,聚集函数
常用的count  max

5,连表查询
1,隐是关联查询:不用join关键字,使用英文点(.)来隐是
2,显示关联查询:使用join关键字 使用显示连接是,还可以用with关键字来提供额外的连接条件,作用相当于sql中的on用于指定连接条件

fetch关键字:持久化类有集合属性的情况,hibernate 默认采用延时加载策略,默认不加载集合属性。如果session 被关闭,持久化类实例将无法访问关联的集合属性。解决方法(1,通过配置指定lazy=“false”关闭延时加载,2,通过fetch关键字抓取持久化类的集合属性,放在join后面)

hibernate 条件查询:


hibernate SQL查询:
1,用于旧的项目移植到hibernate应用上
2,用于HQL无法支持的某些数据库的特性上
一般只有在hql不能查询的时候才使用
addEntity()将查询到的记录与特性的实体关联
addScalar()将查询的记录关联成标量

hibernate悲观锁,乐观锁
数据库的并发性:指的是多个事物可以同时访问数据库中的数据。而当多个事物在数据库中并发是执行,数据库的一致性可以能受到破坏,从而导致数据出现问题。

悲观锁:既某个事物在更新数据的过程中将数据锁定,其他任何事物都不能读取或者修改,必须修改完成后才能访问数据库(类似线程同步机制)
特点:具有排他性,依赖于数据库的机制。
使用场景:短时间处理事务。
使用:在hibernate中使用load()方法
注意:如果使用了悲观锁延时加载就取消了

乐观锁:乐观锁并不是一种锁机制,而是一种冲突检测机制。
特点:并发性较好,事物修改数据是,其他事物任可以修改数据。
使用:常用版本方式。


hibernate性能优化:
1,批处理:手动用flush()+clear()
2,批量更新、删除
3,延时加载:分类:对象的延时加载。对象里的属性延时加载(配置中或者语句中join fetch)。集合延时加载
4,二级缓存,适用的地方(很少别修改的数据,不是很重要的数据,允许出现偶尔的并发的数据,很多模块都要用到的数据,共享数据)







内容概要:本文深入解析了扣子COZE AI编程及其详细应用代码案例,旨在帮助读者理解新一代低门槛智能体开发范式。文章从五个维度展开:关键概念、核心技巧、典型应用场景、详细代码案例分析以及未来发展趋势。首先介绍了扣子COZE的核心概念,如Bot、Workflow、Plugin、Memory和Knowledge。接着分享了意图识别、函数调用链、动态Prompt、渐进式发布及监控可观测等核心技巧。然后列举了企业内部智能客服、电商导购助手、教育领域AI助教和金融行业合规质检等应用场景。最后,通过构建“会议纪要智能助手”的详细代码案例,展示了从需求描述、技术方案、Workflow节点拆解到调试与上线的全过程,并展望了多智能体协作、本地私有部署、Agent2Agent协议、边缘计算插件和实时RAG等未来发展方向。; 适合人群:对AI编程感兴趣的开发者,尤其是希望快速落地AI产品的技术人员。; 使用场景及目标:①学习如何使用扣子COZE构建生产级智能体;②掌握智能体实例、自动化流程、扩展能力和知识库的使用方法;③通过实际案例理解如何实现会议纪要智能助手的功能,包括触发器设置、下载节点、LLM节点Prompt设计、Code节点处理和邮件节点配置。; 阅读建议:本文不仅提供了理论知识,还包含了详细的代码案例,建议读者结合实际业务需求进行实践,逐步掌握扣子COZE的各项功能,并关注其未来的发展趋势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值