深入理解Spring Data JPA:从入门到实践
需积分: 10 32 浏览量
更新于2024-08-04
收藏 2.29MB PDF 举报
"Spring data JPA笔记资料,涵盖了数据库技术,主要讨论了Spring数据访问框架中的JPA技术,包括实体管理、持久化配置、关系映射和JPQL查询等内容。"
在Spring Data JPA中,Java Persistence API (JPA) 是一个用于对象关系映射(ORM)的规范,它允许开发人员将Java类与数据库表进行映射,以便以面向对象的方式处理数据库操作。Spring Data JPA是Spring框架的一个模块,简化了对JPA的使用,并提供了额外的便利功能,如自动化的仓库接口实现。
1. 实体定义:在JPA中,我们使用`@Entity`注解来标记一个Java类作为数据库表的映射。`@Id`注解则用于标识类中的哪个字段作为主键,通常配合`@GeneratedValue`来自动生成主键值。
```java
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 其他属性...
}
```
2. 持久化配置:`persistence.xml`是JPA的标准配置文件,用于定义持久化单元和相关的配置信息,如数据源、实体类等。Spring Data JPA可以不依赖XML配置,通过Java配置或注解来创建`EntityManagerFactory`和`EntityManager`。
```java
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");
EntityManager em = emf.createEntityManager();
```
3. 基本操作:`EntityManager`是JPA的主要工作接口,提供CRUD操作。例如,我们可以使用`persist()`方法保存新实体,`find()`方法查找实体,`merge()`方法更新实体,`remove()`方法删除实体。
```java
em.persist(student); // 保存
Student foundStudent = em.find(Student.class, student.getId()); // 查找
student.setName("New Name"); // 更新
em.merge(student); // 提交更新
em.remove(foundStudent); // 删除
```
4. 集合映射:`@ElementCollection`用于映射非实体类的集合,`@Embeddable`用于创建可嵌入的复合类型,`@OneToOne`, `@OneToMany`, `@ManyToOne`, `@ManyToMany`分别表示一对一、一对多、多对一和多对多的关系映射。
5. JPQL(Java Persistence Query Language):JPQL是JPA的查询语言,类似SQL,但更面向对象。我们可以通过`EntityManager`的`createQuery()`或`createNamedQuery()`方法来构建和执行JPQL查询。命名查询(`@NamedQuery`)是一种预定义的JPQL查询,可以在代码中直接引用其名称,提高代码可读性和复用性。
```java
Query query = em.createQuery("SELECT s FROM Student s WHERE s.name = :name");
query.setParameter("name", "John");
List<Student> students = query.getResultList();
```
6. 事务管理:Spring Data JPA支持声明式事务管理,通过`@Transactional`注解在方法级别进行控制,使得业务逻辑代码可以专注于业务,无需手动管理事务开始、提交和回滚。
通过这些关键概念和用法,Spring Data JPA提供了高效、简洁的方式来处理数据库操作,极大地简化了Spring应用中的数据访问层的开发。
2019-04-16 上传
2020-02-02 上传
2021-06-12 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
Changcc_
- 粉丝: 83
- 资源: 16
最新资源
- 笔记:我的笔记。 公开是因为...为什么不呢?
- gojs-react:一组React组件,用于管理GoJS图表,调色板和概述
- GDSwift:第三方库
- 003494update_SCode.zip_Windows编程_C++_
- Vehicle-API-Challenge
- 终身异常检测
- coder-saga:一站式编码面试准备
- tinypng 图片压缩脚本,自动遍历项目图片.zip
- HelloWorld:霍拉蒙多
- matlab实现bsc代码-viterbiSim:在Matlab中模拟Viterbi算法
- 30.zip_matlab例程_matlab_
- MyMXS-crx插件
- B站移动端开发.zip
- driveStore-styledComponent
- 适用于Android的简单轻量级MVP库-Android开发
- Blockbuster:团队大片项目2