使用 SpringBoot 寫增刪改查
一、前言
1晶丘、之前使用 SSM(Spring+SpringMVC+MyBatis)+Maven 寫后端的接口唐含,創(chuàng)建了不少 Maven 工程捷枯。一開始還覺得 SSM+Maven 是十分簡便的专执,但是后來審美疲勞本股,漸漸感覺這種固定化地創(chuàng)建 New Maven Project 是一件體力操作。
2苟径、比如那些 web.xml(全局配置)躬审、dispatch-Servlet.xml(SpringMVC配置)承边、applicationContext.xml(Spring配置)博助、mybatis-config.xml(MyBatis配置)等大同小異,一開始還會老老實實從0開始寫蛔糯,后來煩了直接復制粘貼之前的代碼城瞎。
3脖镀、SpringBoot 就解決這個硬傷狼电,很快建立工程肩碟,使用 SpringData 封裝數據庫訪問層基本 CURD 接口(SSM還得使用逆向工程)削祈,一個簡單的 application.yml 配置就搞定前面的所有配置脑漫,一手輕巧的注解取代了之前大量的代碼优幸。
這次根據 SpringBoot 官方API文檔等,測試一下基于 SpringBoot 的 CURD羹饰,同時啟用 Restful 風格碳却,編寫起代碼來,十分具有美感~
RESTful API:
RESTful API 目前是前后端分離最佳實踐
① 輕量馍资,直接通過 http座柱,不需要額外的協(xié)議
② 面向資源色洞,一目了然,具有自解釋性
③ 數據描述簡單锦针,一般通過 json 或 xml 做數據通信
二奈搜、依舊是簡單的 CRUD盯荤,后臺的基本
1秋秤、代碼結構
總體來說,還是采用了標準的編程模式绍哎,建立 entity崇堰、dao、service繁莹、controller 包進行分類包裝蒋困,部分接口采用 interface+implements。命名方面也有注意溉跃。
代碼應該是很規(guī)范的告抄。
2打洼、Student.java
實體
package com.cun.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.validator.constraints.NotEmpty;
@Entity // 實體
@Table(name = "t_student") // 數據庫表名
public class Student {
@Id // 主鍵
@GeneratedValue // 自增
private Integer id;
@NotEmpty(message = "學生姓名不能為空") // 表單驗證
@Column(length = 20) // 字段長度
private String t_name;
@Column(length = 20) // 字段長度
private String major;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getT_name() {
return t_name;
}
public void setT_name(String t_name) {
this.t_name = t_name;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
}
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
3募疮、StudentDao.java
dao 接口
實現類都不用寫了阿浓,SpringData-JPA 自動幫你實現芭毙,里邊雖然空空,但是單表基本CRUD接口都寫好了
package com.cun.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import com.cun.entity.Student;
/**
* 簡單的dao層只需要繼承JpaRepository接口粘咖,即可瓮下,
* 兩個參數,分別表示 —— 實體類型两蟀、主鍵類型
* 復雜sql語句再自己增加接口
* @author linhongcun
*
*/
public interface StudentDao extends JpaRepository<Student, Integer>{
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
4赂毯、StudentService.java
事務處接口
package com.cun.service;
import java.util.List;
import com.cun.entity.Student;
public interface StudentService {
public void addStudent(Student student);
public void deleteStudent(Integer id);
public void updateStudent(Student student);
public Student findStudent(Integer id);
public List<Student> findAllStudent();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
5党涕、StudentServiceImpl.java
事務處接口實現類
package com.cun.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.cun.dao.StudentDao;
import com.cun.entity.Student;
import com.cun.service.StudentService;
@Service
public class StudentServiceImpl implements StudentService {
@Autowired?
private StudentDao studentDao;
@Override
public void addStudent(Student student) {
// TODO Auto-generated method stub
studentDao.save(student);
}
@Override
public void deleteStudent(Integer id) {
// TODO Auto-generated method stub
studentDao.delete(id);
}
@Override
public void updateStudent(Student student) {
// TODO Auto-generated method stub
studentDao.save(student);
}
@Override
public Student findStudent(Integer id) {
// TODO Auto-generated method stub
return studentDao.findOne(id);
}
@Override
public List<Student> findAllStudent() {
// TODO Auto-generated method stub
return studentDao.findAll();
}
}
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
6、StudentController.java
控制層
package com.cun.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.cun.entity.Student;
import com.cun.service.StudentService;
//@RestController 代替 @Controller,省略以后的 @ResponseBody
@RestController
@RequestMapping("/student")
public class StudentController {
@Autowired
private StudentService studentservice;
/**
* 顯示所有
* url:"http://localhost/student/findall"
*
* @return
*/
@RequestMapping(value = "/findall")
public List<Student> findAllStudent() {
return studentservice.findAllStudent();
}
/**
* 查找 restful 風格
* url:"http://localhost/student/findone/1"
*
* @param id
* @return
*/
// == @RequestMapping(value = "/findone/{id}", method = RequestMethod.GET)
@GetMapping("/findone/{id}")
public Student findStudentRestful(@PathVariable("id") Integer id) {
return studentservice.findStudent(id);
}
/**
* 刪除 restful 風格
* url:"http://localhost/student/deleteone/4"
* 注意無法通過瀏覽器的鏈接來模擬檢驗,可以通過 jquery的 $.ajax方法,并type="delete"
*
* @param id
*/
// == @RequestMapping(value = "/deleteone/{id}", method = RequestMethod.DELETE)
@DeleteMapping("/deleteone/{id}")
public void deleteStudentRestful(@PathVariable("id") Integer id) {
studentservice.deleteStudent(id);
}
/**
* 增加 restful 風格
* url:"http://localhost/student/addone"
* 通過<form>表單模擬驗證
*
* @param student
*/
// == @RequestMapping(value="/addone",method=RequestMethod.POST)
@PostMapping("/addone")
public void addStudentRestful(Student student) {
studentservice.addStudent(student);
}
/**
* 修改 restful 風格
* url:"http://localhost/student/updateone"
* 驗證:可以通過 jquery的 $.ajax方法燕耿,并type="put",同時注意data形式——A=a&B=b&C=c
*
* @param student
*/
// == @RequestMapping(value="/addone",method=RequestMethod.PUT)
@PutMapping("/updateone")
public void updateStudentRestful(Student student) {
studentservice.updateStudent(student);
}
}
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
7、index.html
接口測試蚜锨,這里寫得有點簡陋慢蜓,不過還是可以正確測試接口寫得是否有問題
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="js/jquery-1.7.2.js"></script>
<script type="text/javascript">
/**
* 實際應用時胀瞪,里邊的參數應根據實際而改變,而不是寫死的圆雁,
* 這里僅僅①簡單地模擬前后端伪朽,②簡單測試接口
*
*/
function del() {
$.ajax({
type : "delete",
url : "http://localhost/student/deleteone/4",
async : true
});
}
function upd() {
$.ajax({
type : "put",
data:"id=6&t_name=cun&major=計科",
url : "http://localhost/student/updateone",
async : true
});
}
</script>
</head>
<body>
<!-- 刪除 -->
<button id="btn" onclick="del()">delete request</button>
<!-- 更新 -->
<button id="btn2" onclick="upd()">update request</button>
<!-- 增加 -->
<form action="http://localhost/student/addone" method="post">
major<input type="text" name="major" />
t_name<input type="text" name="t_name" />
<input type="submit" value="submit" />
</form>
<!-- 查詢 -->
<a href="http://localhost/student/findone/6">select request</a>
</body>
</html>
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
8烈涮、application.yml
配置坚洽,算是很簡單了讶舰,下面幾個配置是最常用的
server:
? port: 80 #為了以后訪問項目不用寫端口號
? context-path: / #為了以后訪問項目不用寫項目名
spring:
? datasource:
? ? driver-class-name: com.mysql.jdbc.Driver
? ? url: jdbc:mysql://localhost:3306/testspring
? ? username: root
? ? password: 123
? jpa:
? ? hibernate:
? ? ? ddl-auto: update? #數據庫同步代碼
? ? show-sql: true? ? ? #dao操作時,顯示sql語句
1
2
3
4
5
6
7
8
9
10
11
12
13
9般甲、pom.xml
在 eclipse 創(chuàng)建 SpringBoot 工程時加入
以后再加入 mysql、jpa鹅颊、web 就好了敷存,并且可以通過 Alt+/ => Edit Starter 加入
三、小結
SpringBoot官方中文參考文檔
【思考:SpringBoot 自動配置】
首先堪伍,這是基于 Spring4+ 版本的
①采用注解 bean 的方式進行配置
②習慣優(yōu)于配置锚烦,自動加載了大量的常用的配置方式,如 SpringMVC+Spring杠娱,視圖解析器挽牢、控制器等
③又可更改,如修改 SpringMVC摊求,@Configuration+@Bean刘离,修改上述自動配置室叉。
————————————————
版權聲明:本文為CSDN博主「larger5」的原創(chuàng)文章,遵循 CC 4.0 BY 版權協(xié)議硫惕,轉載請附上原文出處鏈接及本聲明茧痕。
原文鏈接:https://blog.csdn.net/larger5/article/details/79325999