在本系列的上一篇文章中, 给大家演示了如何用Spring Boot构建一个基本的 Rest 服务。这次我们继续深入,为应用加入数据库的功能。
English Version
配置数据库
为了简化案例,我们使用纯 Java 的数据库 H2,需要配置如下:
- 改变 application.properties 的文件名为 application.yml
- 在文件中加入 H2 的配置参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| spring: datasource: driverClassName: org.h2.Driver url: jdbc:h2:/opt/rss-api/data/hohistar-con-data username: sa password: jpa: database: H2 generate-ddl: true show-sql: true hibernate: ddl-auto: create-drop h2: console: enabled: true path: /api/h2 settings: web-allow-others: true
|
注意:需要将url的目录指到在你的机器上存在的目录
为实体类加入JPA的注解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| @Data @AllArgsConstructor @Entity public class Todo {
@Id @GeneratedValue(strategy=GenerationType.AUTO) private Integer id;
private String title;
private String desc;
}
|
增加 Repository 类
新增一个 repository 包,在包中新建一个 interface: TodoRepository, 该接口继承自 JpaRepository。 并且在接口的定义处加上 @Repository 注解。
1 2 3 4
| @Repository public interface TodoRepository extends JpaRepository<Todo, Integer> {
}
|
定义业务类
新增一个 biz 包, 在包中新建一个业务类: TodoBiz, 该类是一个简单Java类,但是加上了 @Service 注解,在类中注入了 TodoRepository 的实例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public class TodoBiz {
@Autowired private TodoRepository todoRepository;
@Transactional public void addTestTodos(List<Todo> todos) {
todos.forEach(o -> todoRepository.save(o)); }
@Transactional public void addTodo(Todo todo) {
todoRepository.save(todo); }
}
|
改造Api类
打开 TodoApi 类,新增一个 testAddTodos 的方法,在方法中将 Todo 项保存在数据库中。
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
| @RestController public class TodoApi {
@Autowired private TodoBiz todoBiz;
@GetMapping("/ok") public String ok() { return "ok"; }
@GetMapping("/todo") public List<Todo> getTodoList() {
List<Todo> todos = new ArrayList<>(); todos.add(new Todo(1, "Call Metting", "")); todos.add(new Todo(2, "Print File", ""));
return todos; }
@GetMapping("/test/add/todos") public String testAddTodos() {
List<Todo> todos = new ArrayList<>(); todos.add(new Todo(null, "Call Metting", "")); todos.add(new Todo(null, "Print File", ""));
todoBiz.addTestTodos(todos);
return "ok";
}
@PostMapping("/todo") public String addTodo(@RequestBody Todo todo) {
todoBiz.addTodo(todo );
return "ok"; }
}
|
注意:在Api中注入了业务对象 TodoBiz
运行查看结果
- 在浏览器中访问一次 localhost:8080/test/add/todos,返回”ok”字符串
- 在 localhost:8080/api/h2 中查看数据库中的数据
下一步
在下一篇文章中,将介绍如何规范、统一返回数据的格式和模板化过程调用。