基於SpringBoot開發一個Restful服務,實現增刪改查功能

2021-02-20 Java面試那些事兒
作者:虛無境
出處:http://www.cnblogs.com/xuwujing

哈嘍,各位新來的小夥伴們,大家好!由於公眾號做了改版,為了保證公眾號的資源能準時推送到你手裡,大家記得將咱們的公眾號 加星標置頂 ,在此真誠的表示感謝~

正文如下:

# 前言


在去年的時候,在各種渠道中略微的了解了SpringBoot,在開發web項目的時候是如何的方便、快捷。但是當時並沒有認真的去學習下,畢竟感覺自己在Struts和SpringMVC都用得不太熟練。不過在看了很多關於SpringBoot的介紹之後,並沒有想像中的那麼難,於是開始準備學習SpringBoot。在閒暇之餘的時候,看了下SpringBoot實戰以及一些大神關於SpringBoot的博客之後,開始寫起了我的第一個SpringBoot的項目。在能夠對SpringBoot進行一些簡單的開發Restful風格接口實現CRUD功能之後,於是便有了本篇博文。

# SpringBoot介紹


Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。


簡單的來說就是,只需幾個jar和一些簡單的配置,就可以快速開發項目。


假如我就想簡單的開發一個對外的接口,那麼只需要以下代碼就可以了。

一個主程序啟動springBoot

@SpringBootApplicationpublic class Application {  public static void main(String[] args) {    SpringApplication.run(Application.class, args);  }}


控制層

@RestControllerpublic class HelloWorldController {    @RequestMapping("/hello")    public String index() {              return "Hello World";    } }


成功啟動主程序之後,編寫控制層,然後在瀏覽器輸入 http://localhost:8080//hello 便可以查看信息。

感覺使用SpringBoot開發程序是不是非常的簡單呢!


用SpringBoot實戰的話來說:

這裡沒有配置,沒有web.xml,沒有構建說明,甚至沒有應用伺服器,但這就是整個應用程式了。SpringBoot會搞定執行應用程式所需的各種後勤工作,你只要搞定應用程式的代碼就好。


# 基於SpringBoot開發一個Restful服務一、開發準備1.1 資料庫和表

首先,我們需要在MySql中創建一個資料庫和一張表

資料庫的名稱為 springboot,表名稱為 t_user

腳本如下:

CREATE DATABASE `springboot`;
USE `springboot`;
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `name` varchar(10) DEFAULT NULL COMMENT '姓名', `age` int(2) DEFAULT NULL COMMENT '年齡', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;


1.2 maven相關依賴

因為我們使用Maven創建的,所以需要添加SpringBoot的相關架包。

這裡Maven的配置如下:


springBoot最核心的jar


spring-boot-starter :核心模塊,包括自動配置支持、日誌和YAML;

<parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>1.5.9.RELEASE</version>    <relativePath/>   </parent>
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.7</java.version>
<mybatis-spring-boot>1.2.0</mybatis-spring-boot> <mysql-connector>5.1.39</mysql-connector>
</properties>

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>

<!-- Spring Boot Mybatis 依賴 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis-spring-boot}</version> </dependency>
<!-- MySQL 連接驅動依賴 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector}</version> </dependency>
</dependencies>
<build> <plugins> <!--運用SpringBoot 插件 使用spring-boot-devtools模塊的應用,當classpath中的文件有改變時,會自動重啟! --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins> </build>


二、工程說明

成功創建好資料庫以及下載好相應架包之後。


我們來正式開發SpringBoot項目。


2.1工程結構圖:

首先確定工程結構,這裡我就簡單的說明下了。

com.pancm.web - Controller 層com.pancm.dao - 數據操作層 DAOcom.pancm.bean - 實體類com.pancm.service - 業務邏輯層Application - 應用啟動類application.properties - 應用配置文件,應用啟動會自動讀取配置



2.2 自定義配置文件

一般我們需要一些自定義的配置,例如配置jdbc的連接配置,在這裡我們可以用 application.properties 進行配置。數據源實際的配置以各位的為準。

## 數據源配置spring.datasource.url=jdbc:mysql://localhost:3306/springBoot?useUnicode=true&characterEncoding=utf8spring.datasource.username=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.jdbc.Driver

## Mybatis 配置# 配置為 com.pancm.bean 指向實體類包路徑。mybatis.typeAliasesPackage=com.pancm.bean# 配置為 classpath 路徑下 mapper 包下,* 代表會掃描所有 xml 文件。mybatis.mapperLocations=classpath\:mapper/*.xml


三、代碼編寫

在創建好相關工程目錄之後,我們開始來編寫相應的代碼。

3.1 實體類編寫

由於我們這裡只是用於測試,只在資料庫中創建了一張t_user表,所以這裡我們就只創建一個User實體類,裡面的欄位對應t_user表的欄位。

示例代碼如下:

 public class User {   /** 編號 */   private int id;   /** 姓名 */   private String name;   /** 年齡 */   private int age;
public User(){ } public class User { /** 編號 */ private int id; /** 姓名 */ private String name; /** 年齡 */ private int age;
public User(){ }// getter和 setter 略}


3.2 Dao層編寫

在以前的Dao層這塊,hibernate和mybatis 都可以使用註解或者使用mapper配置文件。在這裡我們使用spring的JPA來完成基本的增刪改查。


說明:


一般有兩種方式實現與資料庫實現CRUD:


第一種是xml的mapper配置。


第二種是使用註解,@Insert、@Select、@Update、@Delete 這些來完成。本篇使用的是第二種。

import org.apache.ibatis.annotations.Delete;import org.apache.ibatis.annotations.Insert;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Result;import org.apache.ibatis.annotations.Results;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.annotations.Update;import org.springframework.data.repository.query.Param;import com.pancm.bean.User;
@Mapperpublic interface UserDao { @Insert("insert into t_user(id,name,age) values (#{id},#{name},#{age})") void addUser(User user); @Update("update t_user set name=#{name},age=#{age} where id=#{id}") void updateUser(User user);
@Delete("delete from t_user where id=#{id}") void deleteUser(int id); @Select("SELECT id,name,age FROM t_user where name=#{userName}") User findByName(@Param("userName") String userName); @Select("SELECT id,name,age FROM t_user") List<User> findAll(); }


說明:

mapper : 在接口上添加了這個註解表示這個接口是基於註解實現的CRUD。

Results: 返回的map結果集,property 表示User類的欄位,column 表示對應資料庫的欄位。

Param:sql條件的欄位。

Insert、Select、Update、Delete:對應資料庫的增、查、改、刪。


3.3 Service 業務邏輯層

這塊和hibernate、mybatis的基本一樣。
代碼如下:

接口

import com.pancm.bean.User;
public interface UserService { boolean addUser(User user); boolean updateUser(User user); boolean deleteUser(int id); User findUserByName(String userName); List<User> findAll();}


實現類

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;
import com.pancm.bean.User;import com.pancm.dao.UserDao;import com.pancm.service.UserService;
@Servicepublic class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override public boolean addUser(User user) { boolean flag=false; try{ userDao.addUser(user); flag=true; }catch(Exception e){ e.printStackTrace(); } return flag; }
@Override public boolean updateUser(User user) { boolean flag=false; try{ userDao.updateUser(user); flag=true; }catch(Exception e){ e.printStackTrace(); } return flag; }
@Override public boolean deleteUser(int id) { boolean flag=false; try{ userDao.deleteUser(id); flag=true; }catch(Exception e){ e.printStackTrace(); } return flag; }
@Override public User findUserByName(String userName) { return userDao.findByName(userName); }

@Override public List<User> findAll() { return userDao.findAll(); }}


3.4 Controller 控制層

控制層這塊和springMVC很像,但是相比而言要簡潔不少。

說明:

具體實現如下:

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;
import com.pancm.bean.User;import com.pancm.service.UserService;

@RestController@RequestMapping(value = "/api/user")public class UserRestController { @Autowired private UserService userService; @RequestMapping(value = "/user", method = RequestMethod.POST) public boolean addUser( User user) { System.out.println("開始新增..."); return userService.addUser(user); } @RequestMapping(value = "/user", method = RequestMethod.PUT) public boolean updateUser( User user) { System.out.println("開始更新..."); return userService.updateUser(user); } @RequestMapping(value = "/user", method = RequestMethod.DELETE) public boolean delete(@RequestParam(value = "userName", required = true) int userId) { System.out.println("開始刪除..."); return userService.deleteUser(userId); } @RequestMapping(value = "/user", method = RequestMethod.GET) public User findByUserName(@RequestParam(value = "userName", required = true) String userName) { System.out.println("開始查詢..."); return userService.findUserByName(userName); } @RequestMapping(value = "/userAll", method = RequestMethod.GET) public List<User> findByUserAge() { System.out.println("開始查詢所有數據..."); return userService.findAll(); }}


3.5 Application 主程序

SpringApplication 則是用於從main方法啟動Spring應用的類。

默認,它會執行以下步驟:


1.創建一個合適的ApplicationContext實例 (取決於classpath)。
2.註冊一個CommandLinePropertySource,以便將命令行參數作為Spring properties。
3.刷新application context,加載所有單例beans。
4.激活所有CommandLineRunner beans。

直接使用main啟動該類,SpringBoot便自動化配置了。


ps:即使是現在我依舊覺得這個實在是太厲害了。

該類的一些註解說明。:


SpringBootApplication:開啟組件掃描和自動配置。
MapperScan: mapper 接口類掃描包配置

代碼如下:

import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication@MapperScan("com.pancm.dao")public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); System.out.println("程序正在運行..."); }}


四、代碼測試

代碼編寫完之後,我們進行代碼的測試。


啟動Application 之後,使用postman工具進行接口的測試。

測試結果如下:

這裡只使用了一個get和post測試,實際方法都測試過了,但是感覺沒必要貼圖了。

相關焦點

  • 基於 Spring Boot 實現 Restful 風格接口,實現增刪改查功能
    該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。簡單的來說就是,只需幾個jar和一些簡單的配置,就可以快速開發項目。假如我就想簡單的開發一個對外的接口,那麼只需要以下代碼就可以了。
  • 基於 Spring Boot 的 Restful 風格實現增刪改查
    基於SpringBoot開發一個Restful服務前言在去年的時候,在各種渠道中略微的了解了SpringBoot,在開發web項目的時候是如何的方便、快捷。但是當時並沒有認真的去學習下,畢竟感覺自己在Struts和SpringMVC都用得不太熟練。
  • Springboot 實現 Restful 服務,基於 HTTP / JSON 傳輸
    REST 是屬於 WEB 自身的一種架構風格,是在 HTTP 1.1 規範下實現的。Representational State Transfer 全稱翻譯為表現層狀態轉化。Resource:資源。比如 newsfeed;Representational:表現形式,比如用JSON,富文本等;State Transfer:狀態變化。通過HTTP 動作實現。
  • SpringBoot實現RESTful
    任何的技術都可以實現這種理念,如果一個架構符合 REST 原則,就稱它為 RESTFul 架構比如我們要訪問一個 http 接口:http://localhost:8080/boot/order?id=1021&status=1採用 RESTful 風格則 http 地址為:http://localhost:8080/boot/order/1021/1二、Spring Boot 開發 RESTfulSpring boot 開發 RESTFul 主要是幾個註解實現2.1 @PathVariable
  • PHP怎麼實現字符串的增刪改查
    源 / php中文網      源 / www.php.cn對於PHP初學者來說,字符串的增刪改查可能略有陌生。其實相對於mysql資料庫或者PHP數組元素的增刪改查來說,字符串的增刪改查更加簡單易懂。
  • Springboot+Vue實現上傳文件顯示進度條效果功能
    Excel導出功能5、Spring Boot + Vue前後端分離實現圖片上傳功能6、springboot+jpa+tymeleaf實現分頁功能7、springboot+jpa+thymeleaf實現信息修改功能8、SpringBoot+vue開發微信小程序留言功能9、SpringBoot實現生成帶參數的小程序二維碼功能
  • 29、通過註解的方式整合spring和mybatis實現增刪改查功能
    這是之前通過配置文件整合spring和mybatis實現增刪改查功能的文章:
  • Springboot+Vue實現批量文件上傳(pdf、word、excel)並支持在線預覽功能
    Excel導出功能5、Spring Boot + Vue前後端分離實現圖片上傳功能6、springboot+jpa+tymeleaf實現分頁功能7、springboot+jpa+thymeleaf實現信息修改功能8、SpringBoot+vue開發微信小程序留言功能9、SpringBoot實現生成帶參數的小程序二維碼功能
  • Springboot+Vue實現滑動驗證成功後登錄功能
    1、springboot+mybatis+vue前後端分離實現用戶登陸註冊功能2、SpringBoot+Vue前後分離實現郵件發送功能3、SpringBoot+Spring Data JPA+Vue前後端分離實現分頁功能4、SpringBoot+Spring Data JPA+Vue前後端分離實現
  • Java springMVC] Restful風格API接口設計
    基於這個風格設計的軟體可以更簡潔,更有層次,更易於實現緩存等機制。在Restful風格中,用戶請求的url使用同一個url而用請求方式:get,post,delete,put...等方式對請求的處理方法進行區分,這樣可以在前後臺分離式的開發中使得前端開發人員不會對請求的資源地址產生混淆和大量的檢查方法名的麻煩,形成一個統一的接口。
  • Springboot+layui前後端分離實現word轉pdf功能
    幫助你快速掌握這個功能代碼!別忘了《留言+點在看》給作者一個鼓勵哦!1、springboot+mybatis+vue前後端分離實現用戶登陸註冊功能2、SpringBoot+Vue前後分離實現郵件發送功能3、SpringBoot+Spring Data JPA+Vue前後端分離實現分頁功能4、SpringBoot+Spring Data JPA+Vue前後端分離實現
  • java 小工具 | 封裝通用的 Mybatis 生成模板 |1 秒寫完增刪改查
    Mybatis模板,讓簡單的增刪改查操作,直接通過我們的代碼生成工具就能解決,讓工具從demo級別上升到生產可用的項目mybatis簡單介紹相信很多小夥伴都已經用過Mybatis了,很簡單方便, 在springboot的集成環境裡面,寫個DAO接口,加上註解,然後寫個xml和DAO關聯起來,然後xml裡面方法和DAO裡面的方法關聯起來,然後就可以通過調用DAO方法的形式來調用這個sql
  • 基於 abp vNext 和 .NET Core 開發博客項目 - 自定義倉儲之增刪改查
    不知道大家發現沒有,我們的倉儲接口以及實現,都是以Repository結尾的,這和我們的.Application應用服務層都以Service結尾是一個道理。接下來在就可以在.Application服務層愉快的玩耍了,寫服務之前,我們要分析我們的項目,要有哪些功能業務。由於是博客項目,無非就是一些增刪改查。
  • Go 數據存儲篇(五):建立資料庫連接並進行增刪改查操作
    前面給大家介紹了 Go 語言中的內存存儲和文件存儲,文件存儲的好處是可以持久化數據,但是並不是 Web 應用數據存儲的終極方案,因為這樣存儲起來的數據檢索和管理起來非常麻煩,為此又誕生了資料庫管理系統來處理數據的增刪改查。
  • Restful API設計規範
    RESTFUL是一種網絡應用程式的設計風格和開發方式,基於HTTP,
  • 通過 Laravel Eloquent 模型實現簡單增刪改查操作
    概述Eloquent 是一個 ActiveRecord ORM 框架,ORM 全稱是 Object Relational Mapping,意為對象關係映射,用於實現面向對象程式語言裡不同類型系統的數據之間的轉換,簡單來說,它會構建類與數據表之間的映射關係,從而建立起一個可在程式語言裡使用的「虛擬對象資料庫」。
  • 教你一招徹底擺脫增刪改查!
    小明接了個項目,業務方的需求裡面有很多組織管理、人員管理、事件管理的需求,這些業務有面向終端客戶的查詢,也有面向內部管理人員的管理。
  • [NewLife.XCode]增刪改查入門
    10多年歷史的開源數據中間件,由新生命團隊(2002~2019)開發完成並維護至今,以下簡稱XCode。整個系列教程會大量結合示例代碼和運行日誌來進行深入分析,蘊含多年開發經驗於其中。開源地址:https://github.com/NewLifeX/X回到目錄增刪改查入門新建控制臺項目(.NET Core),從nuget引用NewLife.XCode,(也可以從別的項目引用下載後拷貝XCode.dll和NewLife.Core.dll來使用,區分nfx和netcore版本),敲入以下代碼// 啟用控制臺日誌
  • 面試官:說說你對 RESTful 的理解?
    它主要用於客戶端和伺服器交互類的軟體。基於這個風格設計的軟體可以更簡潔,更有層次,更易於實現緩存等機制。它首次出現在 2000 年 Roy Thomas Fielding 的博士論文中,這篇論文定義並詳細介紹了表述性狀態轉移(Representational State Transfer,REST)的架構風格,並且描述了 如何使用 REST 來指導現代 Web 架構的設計和開發。
  • Linux三劍客sed命令-增刪改查排除
    【功能說明】     sed是Stream Editor(字符流編輯器)的縮寫,簡稱流編輯器。【作用】         sed是操作、過濾和轉換文本內容的強大工具。常用功能有對文件實現快速增刪改查(crud),其中查詢的功能中最常用的2大功能是過濾(過濾指定字符串)和取行(取出指定行)。