Hibernate基础知道(2)

本文详细介绍了Hibernate的多种查询方法,包括HQL、Criteria和Native SQL的特点与适用场景,并对比了get与load方法的不同之处。此外,还深入探讨了一级缓存与二级缓存的工作原理及使用技巧。

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

hiberate的查询方法:

1.使用主键id加载对象(load(),get());

2.通过对象导航,比如通过stu.getTeam()得到team的实例;

3 使用hql;

4使用qbc(query by criteria)

5直接使用sql语句取得记录集;

一般都使用后面三种方式.

注意.hql是面向对象的查询.语法和sql是基本一样的.不区分大小写的,但是注意的是对与对象.必须遵循对象的大小写.因为hql是对像查询..同时我们必须清楚.hql只能取得对象,而不支持uid(update,insert.delete)

hql功能很强大,适合各种情况,但是动态条件查询构造起来很不方便.

criteria 最适合动态查询,但不太适合统计查询,qbe还不够强大.只适合简单的查询.

nativesql可以实现特定的数据库的sql.但是可移植性并不好.

针对web应用来说,大部分常规查询都是动态条件查询,所以首先criteria,并且h 3提供的detachedcriteria,可以在web层构造好detachedcriteria再进入session执行查询.但是涉及到统计查询和非常复杂的关联查询.criteria就无能为力了.这种情况下选择使用hql.最后如果涉及到使用某些数据库的特性的时候,就只有选择 nativesql了

 

 

get和load的区别:
1>不存在对应记录时表现不一样
2>load返回的是代理对象(javassist.jar生成二进制码),等到真正用到对象的内容才会发出SQL语句
3>get直接从数据库加载,不会延迟
无论是get还是load,都会首先查找缓存(一级缓存),如果没有,才会去数据库查找,调用clear()方法,可以强制清除session缓存
调用flush()方法可以强制进行从内存到数据库的同步。
SessionFactory
1>用来管理Session
2>通常情况下每个应用只需要一个SessionFactory
3>除非要访问多个数据库的情况
4>关注两个方法即可
i>openSession每次都是新的,需要close();
ii>getCurrentSession从上下文找,如果有,用旧的,如果没有,创建新的
a>用途,界定事务边界
b>事务提交自动close;
c>current_session_context_class(jta或者thread)
thread使用connection
<一>list和iterate的区别:
a>list取出所有
b>iterate取出id,等要用的时候再根据id取出对象
c>session中的list第二次发出,仍然会倒数据库查询
d>iterate第二次,首先找session级缓存
getCurrentSession()一定要在事务中使用!!!
<二>缓存问题
i:一级缓存:
session级别的缓存

ii:二级缓存:
SessionFactory级别缓存,可以跨Session级别访问
什么对象应该放在二级缓存?
1>经常被访问
2>改动不大
3>数量有限
怎么使用二级缓存?
第一步:打开二级缓存。
第二步:在hibernate文件里面配置如下信息:<这是使用ehcache实现>

true org.hibernate.cache.EhCacheProvider 第三步:添加ehcache.xml文件
第四步:在映射类文件中添加属性:
默认情况下,load会使用二级缓存,iterate会使用二级缓存。
list会默认往二级缓存添加数据,但是查询的时候不使用。

iii:查询缓存:
是指同样的,重复查询使用的缓存。
查询缓存依赖于二级缓存,所以,需要打开二级缓存。

true 写程序的时候,需要调用:Query的setCachable(true);
缓存算法:LRU,LFU,FIFO(面试意义更大,实际当中很少用到)
1.Least Recently Used
2.Least Frequently Used(命中率低)
3.First Infirst Out
memoryStoreEvictionPolicy=”LRU”(ehcache)。

<三>事务的并发处理(面试的意义更大)
并发出现的问题:
1>第一类丢失更新
2>脏读
3>不可重复读
4>幻读
设置Hibernate的设置级别:
1:read-uncommitted
2:read-uncommitted
4:repeatable-read
8:serializable
设置锁的隔离级别:

2 乐观锁和悲观锁。
一对多中,一的一方有多的一方集合,多的一方有以的一方的实体类。
一的一方配置示例:
资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值