前言
Springboot data jpa 和 Spring jdbc 同属于 Spring开源组织,在 Spring jdbc 之后又开发了持久层框架,很明显 Spring data jpa 相对于 Spring jdbc 更加的便捷强大。它可以轻松的实现对数据访问层的增强支持。
依赖
1 2 3 4
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
|
配置
1 2 3 4 5 6
| Spring: jpa: database-platform: org.hibernate.dialect.MySQL5Dialect show-sql: true hibernate: ddl-auto: update # create 每次都重新创建表,update,表若存在则不重建
|
数据实体类
Springboot Data JPA 是 ORM 的完整实现,实体类和数据表关系一一对应,因此实体类也就是数据表结构。spring.jpa.hibernate.ddl-auto=update 会在 JPA 运行时自动在数据表中创建被 @Entity 注解的实体数据表。如果表已经存在,则不会创建。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| package com.qn.eneity;
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table;
@Entity @Table(name = "account") public class Account { @Id @Column(nullable = false) private int id; private String name; private double money; }
|
JPA操作接口
JPA 操作接口只需要继承 JpaRepository 就可以了,JpaRepository 里封装了常用的增删改查分页等方法,可以直接使用,如果需要自定义查询方式,可以通过构造方法名的方式增加。
1 2 3 4 5 6 7 8 9 10
| package com.qn.service;
import com.qn.eneity.Account; import org.springframework.data.jpa.repository.JpaRepository;
public interface JpaService extends JpaRepository<Account, Integer> {
Account findByIdAndName(int id, String name);
}
|
测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| package com.qn.service;
import com.qn.eneity.Account; import org.junit.Assert; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.test.context.junit4.SpringRunner;
import java.util.List; import java.util.Optional;
@SpringBootTest @RunWith(SpringRunner.class) class JpaServiceTest { @Autowired JpaService jpaService;
@Test void getAll() { List<Account> list = jpaService.findAll(); list.forEach(account -> System.out.println(account.toString())); }
@Test void getById() { System.out.println(jpaService.findById(1).toString()); }
@Test void getByPage() { PageRequest pageRequest = PageRequest.of(0, 2);
Page<Account> userPage = jpaService.findAll(pageRequest);
List<Account> userList = userPage.getContent();
userList.forEach((user) -> System.out.println(user));
Assert.assertNotNull(userList); }
@Test void getUpdate() { Optional<Account> byId = jpaService.findById(1); Account account = byId.orElseThrow(() -> new RuntimeException("用户信息没有取到")); account.setMoney(10000); Account save = jpaService.save(account); Assert.assertNotNull(save); System.out.println(save.toString()); }
@Test void getByIdAndName() { Account account = jpaService.findByIdAndName(4, "曾烨烨"); System.out.println(account.toString()); } }
|