SpringBoot——JPA(十三)

前言

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;
//getter setter略
}

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;

/**
* jpa测试
*/
@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()));
}

/**
* 根据id查询
*/
@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());
}
}
文章目录
  1. 1. 前言
  2. 2. 依赖
  3. 3. 配置
  4. 4. 数据实体类
  5. 5. JPA操作接口
  6. 6. 测试
|