JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
JPA 的目标之一是制定一个可以由很多供应商实现的API,并且开发人员可以编码来实现该API,而不是使用私有供应商特有的API。
数据库安装、创建
参考 Spring Boot使用JDBC访问MySQL(五)
代码编写
创建工程
按Ctrl + Shift + P
,输入 Spring
,选择 Spring Initializer
,然后选择 java
;
Group Id
默认;
Artifact Id
输入spring-boot-jpa
;
Spring Boot version
选择 2.2.x
。
添加依赖库:
- Spring Boot DevTools
- Spring Web
- Lombok
- Spring Data JPA
- MySQL Driver
目录结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| src.main ├── java.com.example.springbootjdbc │ ├── controller │ │ └── AccountController.java │ ├── DemoApplication.java │ ├── domain │ │ └── Account.java │ ├── repository │ │ ├── AccountDaoImpl.java │ │ └── IAccountDAO.java │ └── service │ ├── IAccountService.java │ └── impl │ └── AccountServiceImpl.java └── resources └── application.properties
|
application.yml
删除 application.properties
使用 YML 配置文件:
1 2 3 4 5 6 7 8 9 10 11 12
| spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/SpringBootLearn?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8 username: root password: 111111
jpa: show-sql: true properties: hibernate: format_sql: true
|
实体类(Account.java)
通过 @Entity
注解,表明该类是一个映射的实体类, @Id
表示主键:
1 2 3 4 5 6 7 8 9 10 11
| @Data @Entity public class Account {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id;
private String name; private double money; }
|
dao 层(AccountDao.java)
编写一个继承自 JpaRepository 的接口就能完成数据访问,不用编写额外代码。其中包含了几本的单表查询的方法,非常方便。
其中,
- Account 是对象名,而不是具体的表名
- Interger 是主键的类型,一般为
Integer
或者 Long
。
1 2
| public interface AccountDao extends JpaRepository<Account,Integer> { }
|
控制器(AccountController.java)
在本例中没有编写 service 层(直接在控制器中实现),在实际开发中,不可省略。
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
| @RestController @RequestMapping("/account") public class AccountController {
@Autowired AccountDao accountDao;
@GetMapping(value = "/list") public List<Account> getAccount() { return accountDao.findAll(); }
@GetMapping(value = "/{id}") public Optional<Account> getAccountById(@PathVariable("id") int id) { return accountDao.findById(id); }
@PutMapping(value = "/{id}") public String updateAccount(@PathVariable("id") int id, @RequestParam(value = "name", required = true) String name, @RequestParam(value = "money", required = true) double money) { Account account = new Account(); account.setMoney(money); account.setName(name); account.setId(id); Account account1 = accountDao.saveAndFlush(account);
return account1.toString();
}
@PostMapping(value = "") public String postAccount(@RequestParam(value = "name") String name, @RequestParam(value = "money") double money) { Account account = new Account(); account.setMoney(money); account.setName(name); Account account1 = accountDao.save(account); return account1.toString(); } }
|
测试代码
使用 Postman进行 get, post, put
等测试。
更多
更多Spring Boot教程笔记见代码开发 - Spring Boot
参考资料
JPA_百度百科
Spring Boot教程第4篇:JPA
Spring boot 项目目录结构