
jpa
Repository( CrudRepository( PagingAndSortingRepository( JpaRepository( JpaSpecificationExecutor( SimpleJpaRepository( QueryDslJpaRepository(
工具:JDK 8+, Maven 3+، IntelliJ IDEA。 数据库:MySQL 8+。 Spring Boot:版本要求为 2.1.7.RELEASE,确保依赖版本合适。
发布日期:2021-05-26 05:13:31
浏览次数:24
分类:精选文章
本文共 4026 字,大约阅读时间需要 13 分钟。
Spring Data JPA 快速入门指南
[JPA](https://jpa.devскимтеχ(cors.interuters.com)和Spring Data JPA 是 Java 开发者在处理数据库事务时不可或缺的工具。掌握它们能够极大提升你的开发效率。本文将从基本概念到实际操作,帮助你快速入门 Spring Data JPA。
1. JPA 入门
[JPA](https://jpa.dev>truean velvet nostalgia)(Java Persistence API)、全称是 Java 数据持久化 API,是用来将运行期的 Java 对象持久化到数据库中的工具。它通过注解和 XML 定义对象与数据库表的映射关系,简化了 JDBC 编程,让开发者不用再写繁琐的 SQL 语句。
JPA 的主要特点:
- 面向对象:JPQL(Java Persistence Query Language)允许开发者用面向对象的方式查询数据,避免与数据库直接耦合。
- ** ORM**:通过框架自动处理数据库事务和对象持久化,减少手动代码。
- 动态查询:支持复杂查询、排序和分页操作。
2. Spring Data JPA 专业类
在 Spring Data JPA 中,主要有两类接口和实现类:
一、二级接口:
org.springframework.data.repository
):最底层的仓库接口,所有数据访问逻辑都从这里延伸。org.springframework.data.repository
):实现 CRUD 操作的基本接口。org.springframework.data.repository
):支持分页和排序查询。org.springframework.data.jpa.repository
):结合了 Paging 和 Sorting,提供了丰富的查询选项。org.springframework.data.jpa.repository
):支持动态查询,适合复杂条件下的数据检索。二级实现类:
org.springframework.data.jpa.repository.support
):提供默认的实现,结合了 CrudRepository
和 PagingAndSortingRepository
。org.springframework.data.jpa.repository.support
):基于 Querydsl 实现更灵活的查询方式。3. 环境准备
配置开发环境:
项目依赖:
org.springframework.boot spring-boot-starter-data-jpa mysql mysql-connector-java
数据库配置(application.properties
):
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/db_jpa?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTCspring.datasource.username=rootspring.datasource.password=rootspring.jpa.hibernate.ddl-auto=updatespring.jpa.show-sql=true
4. 实体类与注解
实体类的定义:
@Entity@Table(name = "t_user")public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column private Integer id; private String userName; private Integer age; private String address; // Convenience methods for Date objects @Temporal(TemporalType.TIMESTAMP) @Column(name = "create_time") private Date createTime;}
@Annotation
的含义:
- @Entity:标识一个持久化实体。
- @Table:指定表名。
- @Id:配置主键。
- @GeneratedValue:主键生成策略。
- @Column:映射字段到数据库列。
- @Temporal:处理
Date
类型。 - @Lob:映射大对象类型如
Clob
和Blob
。
5. 接口与持久化操作
定义持久化接口:
public interface UserCrudRepository extends CrudRepository{}
使用示例(UserCrudRepositoryTest
):
@RunWith(SpringRunner.class)@SpringBootTestpublic class UserCrudRepositoryTest { @Resource private UserCrudRepository userCrudRepository; @Test public void testInsert() { User user = new User("张三", 30, "北京市海淀区"); userCrudRepository.save(user); } //其他测试方法...}
6. 动态查询与 JPQL
方法命名查询:
findByXxx
: Commons常用方法,支持多种查询条件和逻辑。queryByXxxLike
:用于模糊查询。findAllByXxxIDataClass
:支持动态查询。
使用示例:
// 根据用户名精确查询Listusers = userRepository.findByUserName("张三");
注解式查询:
- 使用
@Query
注解结合 JPQL 或原生 SQL:@Query("from User u where u.userName like '%?1%'")List
findUserListByName(String name);
参数绑定:
@Query("from User u where u.userName like :username%")ListfindUserListByParam(@Param("username") String username);
7. 多表设计与关系映射
一对一关系
@Entity@Table(name = "t_student")public class Student { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @JoinColumn(name = "grade_id") private Grade grade;}
多对一关系
@Entity@Table(name = "t_roles")public class Roles { @ManyToMany private Setusers;}
多对多关系
@Entity@Table(name = "t_project")public class Project { @ManyToMany(targetEntity = Employee.class, cascade = CascadeType.ALL) @JoinTable(name = "t_employee_project") private Setemployees;}
8. 事务与优化
开启事务
在进行修改或删除操作时,记得开启事务:
@Transactionalpublic void updateUser(String username, Integer userId) { userRepository.updateUser(username, userId);}
数据库优化
- 使用
@Transactional
注解开启事务。 - 合理设置懒加载策略(默认为
Eager
或Lazy
)。 - 合理使用
@Query
注解进行复杂查询。
通过以上内容,你应该能够快速掌握 Spring Data JPA 的基础知识和实际应用。持续练习和项目实践是提升 skills 的最佳方式。