Spring boot (一) —— 簡單的增刪查改
本篇介紹如何使用spring boot 框架實現對數據的增刪查改操作。這裏先介紹一下我使用的工具。
- 編譯器:IDEA
- 數據庫:postgre
- 測試工具:postman
- 數據庫工具:Navicat Premium 12
一、新建一個spring 項目
這是IDEA自帶的Spring Assistant插件,假如你的IDEA沒有,那就去下載一下,下載方法如下
點擊右下角的configure,選擇plugins,在Marketplace裏面搜索Spring Assistant,找到後安裝它。(假如你的網絡不好,有可能搜不到東西,我就是被公司電腦坑慘了,如果這裏實在不行,可以去IDEA的官網直接下載)
二、介紹一下spring項目的構成
新建完成後,你會看到類似這樣的目錄,然後我們就可以開始寫我們的代碼了。在寫之前,我先介紹一下我們需要用到的文件
- controller、dao、entity這三個文件夾是自己建的,這裏我是將它分爲三個層,關於這些分層,網上都有介紹和教學(默認都是這些名字),實際上我還是不夠規範,沒有將接口和實現分離,但是不影響。
- Demo4Application是啓動類,啓動程序就是通過它,這裏我們不需要改動它
- application.properties和application.yml都是配置文件,一種是properties文件,另一種是yml文件,可以自己建的,我們推薦yml文件,因爲它格式更好看[滑稽],當然選擇其中一個,另一個文件要把它刪了。
- pom.xml是我們添加jar包時需要改動的
- 以上這些文件在網上都能查到介紹,有興趣的可以去查查看
三、代碼部分
我們先打開pom.xml文件,首先添加依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>2.1.9.RELEASE</version>
</dependency>
</dependencies>
這些就是我這個項目所要用到的全部依賴,缺了哪些補哪些就可以了。
然後打開application.yml文件,寫上配置:
spring:
datasource:
driver-class-name: org.postgresql.Driver
username: postgres
password: 123456
url: jdbc:postgresql://localhost:5432/postgres2
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
temp:
use_jdbc_metadata_defaults: false
- datasource:配置數據庫;hibernate:直接照抄
- 數據庫我用的是postgre的,用其他數據庫(mysql等)的可以自行更換
- username、password、url這些都是數據庫的屬性,網上有大把解釋,我就不贅述了
接着就是功能邏輯的代碼書寫了,按照之前的分層,我們先寫entity(實體類),entity裏面放的就是數據庫的表,比如我這裏的UserInfo,在這個類中定義好表的所有字段,像Id、name等等。
@Entity
@Table(name = "user_info")
public class UserInfo {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "name",nullable = false)
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
像@Entity、@Table、@Id這些註解都有各自的作用,建議讀者自己一個個去搜索其含義和作用,看完之後就能理解這個entity類了。
然後來到UserRepository這個接口,這是一個實現spring boot增刪查改的最關鍵的一個接口,但同時它的寫法也十分簡單,因爲很多方法它已經幫我們實現了。
public interface UserRepository extends JpaRepository<UserInfo, Long>, JpaSpecificationExecutor<UserInfo>
{
List<UserInfo> findUserInfoByName(String name);//按名字字段查詢UserInfo信息
}
接口必須繼承JpaRepository<實體類名,Id的類型>,JpaSpecificationExecutor<實體類名>。
這個findUserInfoByName方法是我們自行添加上去的,因爲默認方法裏面並不知道我們的實體類裏有什麼字段,所以需要我們自行根據需求去定義條件查詢的參數類型。
最後便是Controller層的UserController,這個類是前端和後臺的樞紐,前端傳參和後臺調用具體方法便是在這個類中實現。
@RestController
@RequestMapping(value = "/user")
public class UserController {
@Autowired
UserRepository userRepository;
//查
@GetMapping(value = "/query")
private List<UserInfo> userInfoList(){
return userRepository.findAll();
}
//條件查詢
@GetMapping(value = "/find")
private List<UserInfo> findOne(@RequestParam("name")String name){
return userRepository.findUserInfoByName(name);
}
//增
@PostMapping(value = "/add")
private List<UserInfo> addOne(@RequestParam("name")String name){
UserInfo user = new UserInfo();
user.setName(name);
userRepository.save(user);
return userRepository.findAll();
}
//改
@PutMapping(value = "/update")
private List<UserInfo> updateOne(@RequestParam("id")Long id,@RequestParam("name")String name){
UserInfo user = userRepository.findById(id).get();
user.setName(name);
userRepository.save(user);
return userRepository.findAll();
}
//刪
@DeleteMapping(value = "/delete")
private List<UserInfo> deleteOne(@RequestParam("id")Long id){
userRepository.deleteById(id);
return userRepository.findAll();
}
}
- 同理,這些註解都有各自的作用,建議讀者一個個去網上搜索閱讀相關的知識。這裏我簡單介紹一下@RequestMapping()和@GetMapping()。我們從後綴名可以看出,這兩個及下面的三個註解的作用有相似之處。其實它們value值就是這個接口的地址,我們隨便打開一個網站並打開其中一些內容,可以看到網站地址上有/**,而value值便是這些東西。只不過RequestMapping和GettingMapping所屬的層級不同,舉個例子,假如你在網頁上要調用查詢接口,那麼你需要輸入的便是/user/query。
- @GetMapping、@PostMapping、@PutMapping、@DeleteMapping這四個註解對應着查增改刪這四個接口類型,但實際上我們常用的一般是Get和Post這兩個類型,改和刪甚至查都可以用Post類型,一般來說沒有參數傳入的方法都用Get類型,有參數傳入就用Post類型,這個還要看你參數是怎麼獲取的。
- @RequestParam這個註解便是定義你通過表單獲取這個參數,還有@RequestBody、@PathVariable等註解,分別有不同的應用場景,這是在開發中我們隨時會用到的,讀者可以去查詢相關解釋。(一般網頁傳的參數都是json數據,所以一般會用到RequsetBody,但是我們我們這裏只是簡單的測試這個增刪查改功能,所以用RequestParam就夠了)
- 在這些方法中可以看到實現簡單的增刪查改基本只要用到UserRepository裏面的默認方法就可以實現,如save(),findAll()這些。
四、測試
在application.yml裏面配置數據庫前,我們要建一個數據庫,數據庫屬性就是我們配置的東西。那麼如何建立一個postgre數據庫?這時就要用到我們的數據庫工具Navicat Premium 12了。
- 建立數據庫
點擊PostgreSQL,新建一個數據庫連接
- 連接名隨便起
- 主機名即ip地址
- 端口號
- 初始數據庫就寫你所要建的數據庫名即可
- 用戶名和密碼便是你所要配置的用戶名密碼
- 運行啓動類
從控制檯中我們可以看到這樣一條信息,證明user_info表建立成功。
這樣便算是啓動成功了,可以開始我們的正式測試了。 - 使用postman工具進行測試
輸入地址後send查詢,發現查詢結果爲空,因爲我們的數據庫一條數據都沒有,接下來我們來增添一條數據
因爲我們在調用這個方法是設置的返回數據庫中的所有數據,所以這裏它就返回數據庫中的數據了,我們也可以設置返回字符串類型,只返回一個“成功”。多添加幾條數據再查詢一下。
可以看到這次的結果不爲空了,然後我們再來測試一下條件查詢、改和刪。
可以看到,我們都已成功地對數據庫中的表user_info進行增刪查改操作。
五、總結
總的來說,增刪查改只是spring boot中入門級的操作,同時也是最重要的操作之一,因爲基本上所有的網頁都離不開對數據庫的增刪查改操作。筆者在寫這個demo的時候也出現了不少bug(筆者也是剛學不久),很多bug都是一些十分常見的問題,都可以在網上搜到解決方法,而且debug的過程也是你提升較快的一個過程,不要畏懼bug。
因爲是我也是剛學,有一些東西自己深有體會,但卻不知道怎麼用言語來表達,這裏也十分遺憾不能夠把我理解的東西完整地告訴你們,在後面我也會慢慢寫下去,榨乾自己。
最後講一下我目前對spring boot的掌握情況(入門級),學了增刪查改之後就繼續學了聯表查詢,聯表查詢做一個權限管理的例子,其實相當於增刪查改的進階版,做到聯表的增刪查改。然後就學分頁查詢,分頁查詢是一個比較基礎且重要的東西,基本只要跟表有關都會用到。再然後就看了一點spring緩存的東西,這是優化方面的東西。
其實筆者學這個的東西是因爲帶着任務學的,所以目的性比較強,相應的就不夠系統,這些文章也是來記錄一下自己的學習情況罷了,希望對你們有所幫助。