hibernate悲观乐观锁 缓存 二级缓存 抓取策略

hibernate:一对多,多对多,一对一,乐观锁,二级缓存 测试实现的功能: 一对一新增 一对多新增 多对多新增 多对多删除 乐观锁 一级缓存,二级缓存,读写并发 query 查询一级缓存 Criteria--基于条件查询 dao 实现测试 立即下载

hibernate

悲观锁   load 方法里 有对应的 LockMode 参数。实现悲观锁。( lazy 策略 失效。因为要锁定)

乐观锁   在配置文件 hbm 里面 class 标签中 增加 optimistic-lock=“version” 项,并且在想要做乐观锁的类里 增加 相应的 version 字段,然后在 id 标签下,增加 <version name = "version"> 标签,指明用做 version 的字段是 version 。并且在对应的类里增加 version 字段,如: private int version 。

               乐观锁的实现中,线程 A 和 B 修改同样数据, B 先提交, version 增加。 A 再进行提交操作的话,会报出脏数据错误。

====================================================

HQL

createquery ()和 createSQLQuery ()

外置命名查询:在要查询的类的配置文件 hbm 中加入

< query name = "searchStudent" ><![CDATA[ select s from Student s where s.id < ? and s.classes.name like ]]></ query >

(其中用到了对象导航查询 s.classes.name )

用 session.getNamedQuery("searchStudent") 来查询。

查询过滤器:在要查询的类的配置文件 hbm 中加入

< filter-def name = "stu_search_filter " >< filter-param name = "stu_name " type = "string" /></ filter-def >

在 class 标签中 加入:

<filter name="stu_search_filter " condition="name like :stu_name "></filter>

在程序中调用 session.enableFilter("stu_search_filter ").setParameter("stu_name ", "%0%"); 。对应着过滤器名称 和传入的参数。

 

二级缓存

一级缓存 的生命周期是 session 级

二级缓存 的生命周期是 sessionFactory 级

        所用 ehcache 来提供缓存

首先在 src 下加入 ehcache.xml 配置文件。 Ehcache 配置文件参数简介

MaxelementsInmemory=10000 缓存里最多存 10000 个对象

Eternal=false 不是永久有效

TimetoLiveseconds=”120” 对象在缓存中存活多长时间 s 为单位

Timetoidleseconds=”120” 空闲 多长时间不访问失效

OverflowTodisk=true  超出 10000 对象,是否保存到磁盘上。路径

<diskstore path=”java.io.tmpdir”>

然后在 hibernate.xml 中开启二级缓存(默认是开启的),声明缓存提供商,也就是处理缓存的类。启用二级缓存

< property name = "hibernate.cache.use_second_level_cache" > true </ property >

< property name = "hibernate.cache.provider_class" >

org.hibernate.cache.EhCacheProvider </ property >

<property name="hibernate.cache.use_query_cache">true</property>

并且在 mapping 标签下 加入所要实施缓存的类

<class-cache usage="read-only" class="com.john.hibernate.Student"/>

以上就可以完成缓存的设置。

通过设置缓存交互模式,可以设置管理缓存。

session.setCacheMode(CacheMode.GET/PUT/NOMAL);( 只读不写,只往缓存里放数据而不读数据。默认是可读可写 )

查询缓存

query.setCacheable(true);

Query query = session.createQuery( "fromStudent" );

query.setCacheable( true );

List stu = query.list();

 

关联对象的抓取策略 在 <many-to-one….fetch=”select”>

Select 另外发送一条 sql 抓取当前对象的关联对象或集合

Join  会用过 select 语句使用外连接 来加载其关联实体或集合 此时 lazy 失效。

Subselect 常用于集合 <set  fetch=”subselect”>

影响 HQL 查询。会通过一条子查询语句,把所有对象查出来。

 

Batch-size 属性 可以批量加载对象:

<class name="com.john.hibernate.Student" table="t_student" batch-size="5">

 

在 hibernate.xml 中加入

< property name = "hibernate.jdbc.batch_size" > 30 </ property > (批量更新缓存)

< property name = "hibernate.jdbc.fetch_size" > 50 </ property > (批量查询缓存)

 

 

 

相场断裂模型中的各向异性机制:从裂纹密度到驱动力的数值实现 断裂力学是研究材料在载荷作用下裂纹萌生与扩展规律的基础学科,其核心在于理解材料失效的能量准则与路径选择。传统方法通常预设裂纹路径,而相场断裂模型通过引入连续的相场变量,将裂纹模拟转化为一个能量最小化问题,能够自发预测裂纹的萌生、扩展与分叉,在工程失效分析中具有重要价值。当材料具有显著的方向依赖性时,如单晶、复合材料或轧制金属板,各向同性假设会失效,此时需引入各向异性机制。该机制的核心在于改造两个关键部分:一是裂纹密度函数,通过引入各向异性张量来定义不同方向上形成裂纹微结构的能量成本;二是临界能量释放率(断裂 阅读详情

相关推荐

小白跑WRF第三天,安装三方依赖库

小白跑WRF第三天,安装三方依赖库各类安装包的准备 各类安装包的准备 官网教程:https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.php 根据官网教程需要的安装包有以下几个 系统环境 用途 zlib-1.2.7 zlib是提供数据压缩用的函式库。 netcdf-4.1.3 读nc文件的。 mpich-3.0.4 用于并行运算的工具。 libpng-1.2.50 libpng是一款C语言编写的比较底层

weixin_42372313的博客 1万+

hibernate4从入门到大神(备java基础,mysql,javaee经典框架)

Hibernate4开发技术:ORM思想,hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,Hibernate分页技术,Hibernate性能优化技术。

西门子Industrial Copilot实战:5个工业场景下的AI效率提升案例

本文通过五个工业场景实战案例,深入解析西门子Industrial Copilot如何将工业智能转化为实际生产力。从自动化配置、预测性维护到能源优化与人机交互,这位AI助手显著缩短工程周期、提升设备可用率并降低运营成本,展示了其在工业领域系统化、工程化的落地价值。

3c4x5z6v7b的博客 928

Hibernate二级缓存 ---- 最佳实践

作者:赵磊 博客:http://elf8848.iteye.com       2010年11月7号,立冬,星期天。北京外面风好大,躲在家里整理一下这篇文章,发出来与大家分享,对大家有帮助是我最高兴的事儿。       不要想当然的认为使用了Hibernate的二级缓存就一定能够提高应用程序的性能,仅仅在你能够驾驭它,并且条件适合的情况下才是这样的。    使用hibernat...

SiC B2B2C Shop大型B2B2C商城软件产品,使用Java语言开发,高性能高扩展性高安全性分布式。可帮助你快速的建立大型B2B2C电商系统 402

关于 Python PyQt5 界面运行时提示无法初始化Qt平台的解决方案

关于 Python PyQt5 界面运行时提示无法初始化Qt平台的解决方案

smart_num_1的博客 6883

24届数字IC设计/验证秋招总结贴——先看这个

为方便快速进行查找该专栏的内容,将所有内容链接均放在此篇博客中整理不易,欢迎订阅~~

qq_42135020的博客 8416

Hibernate性能(缓存、悲观锁、乐观锁)

本文主要讲诉hibernate性能的优化以及缓存、悲观锁和乐观锁

zjx2016的博客 973

C++ 小游戏程序 (共七款)

C++编程小游戏_闪耀的天狼星的博客-优快云博客_游戏c++C++跑酷小游戏_闪耀的天狼星的博客-优快云博客。好玩的c++编程小游戏,共六款。代码】C++跑酷小游戏。

小天狼星_布莱克 的博客 3万+

hibernate_二级缓存(second cache)

适合用二级缓存的对象: 该对象读的次数远远大于写的次数. 如果每次读出来是为了写(即频繁写的对象),则不适合放入二级缓存. 因为如果一个经常写的对象放入二级缓存, hibernate 需要经常修改二级缓存里存放的该对象, 即锁住map, 其他线程就会锁在这, 性能差. 下面介绍二级缓存如何使用: (1) 告诉hibernate 你使用哪个缓存框架( 以ehcache 为例 ), 在hibe

qq_31155349的博客 509

Proteus-51单片机-LCD1602显示DS1302时钟

本文详细介绍了如何使用Proteus仿真51单片机配合LCD1602显示DS1302时钟的步骤,包括DS1302时钟芯片的主要特性、引脚定义、外围电路以及LCD1602的原理和技术参数。此外,还讲解了LCD1602的指令集和显示字符的方法,并给出了初始化及显示操作的步骤。

让你爱上电路设计 6980

公文流转系统

公文录入区 | QLineEdit(文号/标题)、QComboBox(公文类型/紧急程度)、QTextEdit(正文)、QListWidget(附件列表)、QPushButton(上传附件/保存草稿/提交审批) |// 按时间范围获取。QStringList userNames = {"张三", "李四", "王五", "赵六", "钱七", "孙八", "周九", "吴十", "郑十一", "王十二"};

寒寒豆豆软件公司的博客 550

Hibernate性能优化策略

  使用乐观锁在表中加一个version的字段来解决并发性问题   悲观锁:就是多个人同时想修改某个数据,   第一个人读出数据,数据库就锁定了其他人对该数据的修改和删除,   但允许其它人查询该数据,直到第一个人提交保存后其它人才能修改,   否则其它人在提交时系统会一直等待第一个人完成提交   乐观锁:乐观锁需要在表中加一version(版本)字段,并要在对应的类...

LIXG425的专栏 155

用 MVC 框架把 ABAP 报表写成可扩展的应用(2)

本文介绍了一个基于MVC架构的SAP报表模板,解决了传统ABAP报表开发中的三个核心痛点: 选择屏幕校验逻辑分散问题 - 通过统一的选择屏幕控制器集中管理校验逻辑 在线与后台输出不一致问题 - 共享同一数据模型,通过不同控制器实现多样化展示 屏幕流转管理混乱问题 - 主控制器统一管理所有屏幕流程和事件 该模板采用分层架构: Model层专注数据获取和业务规则 Controller层管理流程和交互 View层负责展示逻辑 特别适用于需要同时支持交互式ALV展示和后台批处理输出的报表场景,通过标准化的扩展点设计

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 78

hibernate性能优化策

悲观锁与乐观锁 使用乐观锁在表中加一个version的字段来解决并发性问题 悲观锁:就是多个人同时想修改某个数据,乐观锁:乐观锁需要在表中加一version(版本)字段,并要在对应的类中配置   一级缓存1、一级缓存很短,和session的生命周期一致,随着session的关闭而消失    *load/get/iterate(查询实体对象)可以使用缓存数据 2、一级缓存它缓存的是实体对象  ...

weixin_44048532的博客 193

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Hibernate复习笔记

(一)第一个hibernate项目 1、创建java项目 2、创建User Library,加入依赖包* HIBERNATE_HOME/lib/*.jar* HIBERNATE_HOME/hibernate3.jar* 加入数据库驱动(mysql驱动) 3、提供hibernate.cfg.xml文件,完成基本的配置 4、建立实体类User.java 5、提供User.hbm.xml...

maozhuxigood 122

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

hibernate的优化与事务

1 延迟加载 (1)定义:当真正需要数据时才从数据中加载数据,目的就是为了提高执行效率。   注意:当加载延迟加载的数据时,Session关闭,那么就会出现no session的异常,从而导致延迟加载的数据,无法加载。 (2)延迟加载的分类:      1 实体级别: 此只对load方法有效。   2 集合级别:       extra:除了

youngboby的博客 456

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Hibernate总结3

实例状态: PO的三个状态:瞬态,持久化,脱管(离线) 1、(瞬态)未被持久化的VO此时就是一个内存对象VO,由JVM管理生命周期  2、(持久化)已被持久化的PO,并且在Session生命周期内 此时映射数据库数据,由数据库管理生命周期  3、(脱管)曾被持久化过,但现在和Session已经detached了,以VO的身份在运行 这种和Session已经d

Granth的专栏 853

Hibernate如何提升数据库查询的性能

数据库查询性能的提升也是涉及到开发中的各个阶段,在开发中选用正确的查询方法无疑是最基础也最简单的。 SQL语句的优化 使用正确的SQL语句可以在很大程度上提高系统的查询性能。获得同样数据而采用不同方式的SQL语句在性能上的差距可能是十分巨大的。 由于Hibernate是对JDBC的封装,SQL语句的产生都是动态由Hibernate自动完成的。Hibernate产生SQL语句的方式有两种:一种是通过...

小猪奋斗 345

Hibernate 知识点总结

HIbernate最佳实践 1、使用Configuration装载映射文件时,不要使用绝对路径装载。最好的方式是通过getResourceAsStream()装载映射文件,这样Hibernate会从classpath中寻找已配置的映射文件。 2、SessionFactory的创建非常消耗资源,整个应用一般只要一个SessionFactory就够了,只有多个数据库的时候才会使用多个SessionFa...

lgxzzz的博客 455

Hibernate 加载类型,缓存,锁

1.      懒加载(只有load支持): Lazy Eg: 默认情况下是lazy=”true”: //LAZY="TRUE" Person person1 = (Person)session.load(Person.class, "2c9282db421b85c201421b85c3940003");//不会发送查询sql Syste

DOVEty的专栏 643

Hibernate

/***** Hibernate关联映射有7种2类: 单向关联:只需单向访问关联端(4种) 单向 一对一关联 单向 一对多关联 单向 多对一关联 单向 多对多关联 必须使用连接表 双向关联:关联的两端可以互相访问(3种) 双向 一对一关联 一边使用one-to-one 双向 一对多关联 双向 多对多关联 注解: @Entity 持久类 @Table(name = “promotion_info”)...

WTFZJJ的博客 275

Hibernate高级应用

1.一级缓存(session里面的实体对象,存放在内存中) ☞get/load/list/iterate可以将对象放入到一级缓存中 List操作不会利用一级缓存 ☞get/load/iterate可以利用一级缓存 ☞flush方法将改变后的同对象持久化到数据库中 2.二级缓存 即SessionFactory级别的缓存。默认的情况下是打开的。这是一个全局缓存策略。它可以对对象的数据进行全局缓存。 一...

Ccccyxji的博客 261

Hibernate检索(抓取)策略

* 检索(抓取)策略 1)区分立即检索和延迟检索     class 标签中lazy=false 立即检索     class 标签中lazy=true 延迟检索 2)区分类级别和关联级别的检索     类级别检索:直接加载目标对象         Customer c = session.get(Customer.class,1);     关联级别:由加载到的对象导航到其他对象

robbinBlog 529

Hibernate高级应用:性能优化策略

1.一级缓存(session里面的实体对象,存放在内存中) ☞get/load/list/iterate可以将对象放入到一级缓存中 List操作不会利用一级缓存 ☞get/load/iterate可以利用一级缓存 ☞flush方法将改变后的同对象持久化到数据库中 2.二级缓存 即SessionFactory级别的缓存。默认的情况下是打开的。这是一个全局缓存策略。它可以对对象的数据进行全

黄方 (舞动的心弦) 的专栏 1154

JAVAWEB开发之Hibernate详解(三)——Hibernate的检索方式、抓取策略以及利用二级缓存进行优化、解决数据库事务并发问题...

Hibernate的检索方式 Hibernate提供了以下几种检索对象的方式: 导航对象图检索方式:根据已经加载的对象导航到其他对象。 OID检索方式:按照对象的OID来检索对象。 HQL检索方式:使用面向对象 的HQL查询语言。 QBC检索方式:使用QBC(Query By Criteria)API来检索对象.这种API封装了基于字符串形式的查询语句,提供了更加面向对象的查询接口。 本...

iteye_18817的博客 299
上一篇: MYSQL 字符集问题
下一篇: 数据库设计三大范式应用实例剖析
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值