昨天介绍了如何使用 StringBoot,今天讲讲怎么使用 JPA 操作数据库,并完成简单的 RESTful 风格接口。
本章代码的 DEMO 地址:https://github.com/wxnacy/study/tree/master/java/SpringBoot-JPA
JPA 说白了就是我们常说的 ORM ,为了避免写繁琐的 SQL 语句,这些框架进行了不断的封装,就是为了让我们更加方便的开发,把精力更多的集中在业务逻辑上。
看本文前如果你还不了解 StringBoot,建议你先看下这篇文章使用 Maven 构建 StringBoot:Hello World,因为我将不再讲项目结构。
创建数据库
新建一个 study
库,并新建 user
表
1 | DROP TABLE IF EXISTS `user`; |
配置 pom.xml
1 | <dependency> |
添加 JPA 和 Mysql 的依赖包
配置数据源
创建配置文件 src/main/resources/application.properties
1 | spring.datasource.url=jdbc:mysql://localhost:3306/study |
创建 application.properties 文件,项目启动时会自动读取该文件中的数据,不需要配置路径,框架已经封装好了。
创建数据映射类
创建 src/main/java/com/wxnacy/spring/User.java
1 | package com.wxnacy.spring; |
使用 @Entity
注解让 Spring 明白,这是个映射类,并直接映射到 user 表。@Id
告诉框架哪个是主键 id。@GeneratedValue(strategy = GenerationType.AUTO)
声明主键 id 的生成规则,GenerationType.AUTO
是把生成规则交给数据库引擎来操作,在本 Demo 中就是自增规则,这个值是缺省值,也可以直接用 @GeneratedValue()
来进行注解。GenerationType
的其他值,见文档
创建数据访问接口
创建 src/main/com/wxnacy/spring/UserReopsitory.java
1 | package com.wxnacy.spring; |
这个类是关键,通过集成 JapRepository
接口,集成封装好的方法 save(), findAll(), delete()
等方法,也可以自定义方法。
它有一个非常令人兴奋的功能,就是可以根据名称来智能生成方法,比如 findByName
,如果你使用驼峰命名法,将名称跟在后面,就可以根据字段 name
来查询数据,这给我们无限的可用性。
更多用法,见文档
创建控制器
src/main/com/wxnacy/spring/UserController.java
1 | package com.wxnacy.spring; |
使用 RESTful 风格,分别创建三个接口,创建用户,根据名称查询用户列表,以及查询单个用户。
运行
1 | $ mvn spring-boot:run |
创建用户
1 | $ curl -X POST localhost:8080/user -H "Content-Type:application/json" -d '{"name":"wxnacy"}' |
1 | {"id":1,"name":"wxnacy"} |
成功后重复创建几次
查询单个用户
1 | $ curl localhost:8080/user/1 |
1 | {"id":167,"name":"wxnacy"} |
根据用户名查询用户列表
1 | $ curl localhost:8080/user |
1 | [{"id":1,"name":"wxnacy"},{"id":2,"name":"wxnacy"}] |
参考
