红茶的个人站点

  • 首页
  • 专栏
  • 开发工具
  • 其它
  • 隐私政策
Awalon
Talk is cheap,show me the code.
  1. 首页
  2. 专栏
  3. Spring Boot 学习笔记
  4. 正文

Spring data JPA 简易指南

2025年10月7日 21点热度 0人点赞 0条评论

准备工作

先创建一个 Spring Boot 项目,我这里的版本是3.5.6。

添加 Spring data jpa 的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

按照需要选择性添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
​
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.42</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

实体类

创建实体类:

@Entity
@Table(name = "customer")
@Data
@ToString
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Customer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String firstName;
    private String lastName;
​
    public Customer(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

这里使用 Lombok 简化实体类的代码。

Spring JPA 的实体类除了通常实体类需要的 Getter/Setter 方法外,还需要提供一个无参构造器用于 Spring JPA 创建实体类对象,这个无参构造器不需要是 public 的,只需要设置为 protected 即可。

这里最好编译一下,查看 Lombok 是否正确生成了期望的字节码,如果不是,需要检查是 Lombok 版本太旧存在 bug 抑或是 IDE 的配置问题(编译工具里查看注解处理器的配置)

JPA 的实体类由 @Entity 注解标记。JPA 的实体类默认对应的表名就是实体类名称,如果不是,就需要使用@Table注解指定,这里实际上不是必须的。

需要用@Id标记实体类中的主键字段,用@GeneratedValue表名主键生成规则,MySQL 中的主键自增对应@GeneratedValue(strategy = GenerationType.IDENTITY),不同的数据库自增这里的规则可能不同。

存储库

创建实体类对应的存储库:

public interface CustomerRepository extends CrudRepository<Customer, Long> {
    List<Customer> findByLastName(String lastName);
​
    Customer findById(long id);
}

JPA 中的存储库(repository)对应 MyBatis 中的 Mapper。

这个存储库继承了CrudRepository接口,该接口提供了一些 JPA 默认封装的增删改查相关的接口方法。

测试

编写测试用例测试存储库:

@SpringBootTest
public class CustomerRepositoryTests {
    @Autowired
    private CustomerRepository customerRepository;
    @Test
    public void testAddCustomers(){
        customerRepository.save(new Customer("Jack", "Bauer"));
        customerRepository.save(new Customer("Chloe", "O'Brian"));
        customerRepository.save(new Customer("Kim", "Bauer"));
        customerRepository.save(new Customer("David", "Palmer"));
        customerRepository.save(new Customer("Michelle", "Dessler"));
    }
​
    @Test
    public void testFindByLastName() {
        Iterable<Customer> customers = customerRepository.findByLastName("Bauer");
        for (Customer customer : customers) {
            System.out.println(customer);
        }
    }
​
    @Test
    public void testFindById() {
        Customer customer = customerRepository.findById(1L);
        System.out.println(customer);
    }
​
    @Test
    public void testFindAll() {
        Iterable<Customer> customers = customerRepository.findAll();
        for (Customer customer : customers) {
            System.out.println(customer);
        }
    }
}

参考资料

  • 入门指南 | 使用 JPA 访问数据 --- Getting Started | Accessing Data with JPA

  • 从零开始 Spring Boot 35:Lombok - 红茶的个人站点

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: jpa spring
最后更新:2025年10月7日

魔芋红茶

加一点PHP,加一点Go,加一点Python......

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2021 icexmoon.cn. ALL RIGHTS RESERVED.
本网站由提供CDN加速/云存储服务

Theme Kratos Made By Seaton Jiang

宁ICP备2021001508号

宁公网安备64040202000141号