Spring boot (一)—— 簡單的增刪查改

Spring boot (一) —— 簡單的增刪查改

本篇介紹如何使用spring boot 框架實現對數據的增刪查改操作。這裏先介紹一下我使用的工具。

  1. 編譯器:IDEA
  2. 數據庫:postgre
  3. 測試工具:postman
  4. 數據庫工具: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緩存的東西,這是優化方面的東西。
其實筆者學這個的東西是因爲帶着任務學的,所以目的性比較強,相應的就不夠系統,這些文章也是來記錄一下自己的學習情況罷了,希望對你們有所幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章