jpa持久化及缓存

1、spring jpa持久化:由EntityManager 管理,对应一个持久化上下文(一级缓存),实体有不同的状态:新建、托管、游离、移除状  态

注意:

a、如果spring没开启事务,通过findOne()查找到的实体,就会不在托管状态下;对这个对象属性的更改,不会同步到数据库。

b、如果spring开启了事务,通过findOne()查到到的实体,就会在托管状态下;对这个对象属性的更改,会同步到数据库。

c、具体可参考极客学院spring jpa data的介绍
Spring Data Jpa 实体状态分析:https://blog.youkuaiyun.com/mynamepg/article/details/80465741

2、spring jpa缓存:分为一级缓存(会话或事务缓存)、二级缓存(全局缓存)

数据库性能最佳实践 - JPA缓存:https://blog.youkuaiyun.com/mynamepg/article/details/80465762
### JPA 持久化机制详解 #### 什么是JPAJPA(Java Persistence API),即Java持久化API,是一种用于管理Java应用程序中的关系数据的标准规范[^1]。它提供了一种基于ORM(对象-关系映射)的方式,在Java类和数据库表之间建立桥梁。 #### 实体管理和生命周期 在JPA中,实体是指那些被持久化的Java类实例。每个实体都有其特定的状态转换路径: - **瞬态 (Transient)**:新创建的对象尚未与任何持久化上下文关联。 - **托管 (Managed/Persistent)**:当实体通过`EntityManager`注册到当前事务时进入此状态;此时该实体的所有变更都会自动同步至数据库。 - **分离 (Detached)**:一旦事务结束或者显式调用了`detach()`方法,则会变成这种状态;后续对该实体所做的修改不会反映回数据库除非重新附加。 - **删除 (Removed)**:标记为移除的实体将在下一个flush操作期间从数据库中物理上消失。 #### 基础概念和技术细节 ##### ORM 映射配置 为了实现对象与表格间的映射,通常采用注解的形式来定义字段如何对应列以及各种约束条件等属性。常见的注解包括但不限于: - `@Entity`: 表明这是一个可持久化的POJO; - `@Table(name="...")`: 可选参数指定实际使用的表名,默认情况下取自于简单类名称; - `@Id`, `@GeneratedValue(strategy=...)`: 主键及其生成策略声明; - 关联关系描述符如`@OneToMany`,`@ManyToOne`. ```java @Entity @Table(name = "employees") public class Employee { @Id private Long id; // Other fields and methods... } ``` ##### CRUD 操作支持 借助`EntityManager`接口可以方便地执行基本的数据访问任务而不必编写复杂的SQL语句。主要的方法如下所示: | 方法 | 描述 | | --- | --- | | persist(entity) | 将给定的新实体保存入数据库并使其成为受管状态下的成员之一| | merge(detached_entity)| 更新已存在的记录或插入新的记录取决于传入的是不是处于detached状态下| | remove(entity)| 删除指定的实体对应的行| | find(class, primary_key)| 根据主键查找单个实体| ##### 查询语言JPQL 除了上述简单的增删改查外,还提供了类似于HQL(Hibernate Query Language)的一种查询表达方式——JPQL(Java Persistence Query Language),允许开发者构建灵活多样的检索逻辑。例如: ```sql SELECT e FROM Employee e WHERE e.salary > :minSalary ORDER BY e.name ASC ``` 这里使用了命名参数(`:minSalary`)以增强安全性和灵活性。 #### 高级特性概述 随着版本迭代更新,现代版次引入了许多实用的功能扩展点,比如监听器回调函数、缓存机制优化等等,旨在进一步提升性能表现的同时降低编码复杂度。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值