基于SpringBoot开发一个Restful服务,实现增删改查功能

SpringBoot介绍

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
简单的来说就是,只需几个jar和一些简单的配置,就可以快速开发项目。
 

基于SpringBoot开发一个Restful服务

一、开发准备

1.1 数据库和表

在MySql中创建一个数据库和一张表,数据库的名称为 springboot,表名称为 book
基于SpringBoot开发一个Restful服务,实现增删改查功能

 

1.2 maven相关依赖

因为我们使用Maven创建的,所以需要添加SpringBoot的相关架包。
这里Maven的配置如下:
springBoot最核心的jar
spring-boot-starter :核心模块,包括自动配置支持、日志和YAML;

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>missLove</groupId>
    <artifactId>springboot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <mysql.version>8.0.13</mysql.version>
    </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-test</artifactId>
            <scope>test</scope>
        </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>

        <!-- MySql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>



    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>

            <!--运用SpringBoot 插件  使用spring-boot-devtools模块的应用,当classpath中的文件有改变时,会自动重启! -->

        </plugins>
    </build>

</project>
 

二、工程说明

成功创建好数据库以及下载好相应架包之后。
我们来正式开发SpringBoot项目。

2.1工程结构图:

首先确定工程结构,这里就直接上图了。

基于SpringBoot开发一个Restful服务,实现增删改查功能

2.2 自定义配置文件

一般我们需要一些自定义的配置,例如配置jdbc的连接配置,在这里我们可以用 application.properties 进行配置。数据源实际的配置以各位的为准。

## 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=qwerqwer
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

## Mybatis 配置
# 配置为 com.pancm.bean 指向实体类包路径。
#mybatis.typeAliasesPackage=misslove.springboot.beans
# 配置为 classpath 路径下 mapper 包下,* 代表会扫描所有 xml 文件。
#mybatis.mapperLocations=classpath\:mapper/*.xml

三、代码编写

在创建好相关工程目录之后,开始编写相应的代码。

3.1 实体类编写

由于在数据库中创建了一张book表,所以这里我们就只创建一个Book实体类,里面的字段对应book表的字段。

示例代码如下:

package misslove.springboot.Bean;

public class Book {
    String name;
    String author;
    String price;
    String isbn;
    public Book(){}
    public Book(String name, String author, String price, String isbn){
        this.name = name;
        this.author = author;
        this.price = price;
        this.isbn = isbn;
    }

    public String getIsbn() {
        return isbn;
    }

    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }
}

3.2 Dao层编写

在以前的Dao层这块,hibernate和mybatis 都可以使用注解或者使用mapper配置文件。在这里使用spring的JPA来完成基本的增删改查。
说明:
一般有两种方式实现与数据库实现CRUD:
第一种是xml的mapper配置。
第二种是使用注解,@Insert、@Select、@Update、@Delete 这些来完成。本篇使用的是第二种。

package misslove.springboot.Dao;

import misslove.springboot.Bean.Book;
import org.apache.ibatis.annotations.*;
import java.util.List;

@Mapper
public interface BookDao {

    @Insert("insert into book(isbn,name,author,price) values (#{isbn},#{name},#{author},#{price})")
    void addBook(Book book);

    @Update("update book set name=#{name}, author=#{author},price=#{price}")
    void updateBook(Book book);

    @Select("select * from book")
    List<Book> findBook();

    @Delete("delete from book where isbn=#{isbn}")
    void deleteBook(String isbn);

}

说明:

  • mapper : 在接口上添加了这个注解表示这个接口是基于注解实现的CRUD。
  • Insert、Select、Update、Delete:对应数据库的增、查、改、删。

3.3 Service 业务逻辑层

代码如下:

Service层接口:

package misslove.springboot.Service;

import misslove.springboot.Bean.Book;
import java.util.List;

public interface BookService {
    boolean addBook(Book book);
    boolean deleteBook(String isbn);
    List<Book> findBook();
    boolean updateBook(Book book);
}

Service层实现类

package misslove.springboot.Service;

import misslove.springboot.Dao.BookDao;
import misslove.springboot.Bean.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class BookServiceImpl implements BookService{

    @Autowired
    private BookDao bookDao;

    @Override
    public boolean addBook(Book book){
        try{
            bookDao.addBook(book);
            return true;
        }catch (Exception e){
            return false;
        }
    }

    @Override
    public boolean deleteBook(String isbn){
        try{
            bookDao.deleteBook(isbn);
            return true;
        }catch (Exception e){
            return false;
        }
    }

    @Override
    public boolean updateBook(Book book){
        try{
            bookDao.updateBook(book);
            return true;
        }catch (Exception e){
            return false;
        }
    }

    @Override
    public List<Book> findBook(){
        return bookDao.findBook();
    }
}

3.4 Controller 控制层

控制层这块和springMVC很像,但是相比而言要简洁不少。
说明:

  • RestController:默认类中的方法都会以json的格式返回。
  • RequestMapping: 接口路径配置。
  • method : 请求格式。
  • RequestParam: 请求参数。

具体实现如下:

package misslove.springboot.Controller;

import misslove.springboot.Service.BookService;
import misslove.springboot.Bean.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import static org.springframework.web.bind.annotation.RequestMethod.*;

@RestController
@RequestMapping(value = "/book")
public class BookController {
    @Autowired
    private BookService bookService;

    //@RequestMapping(method = RequestMethod.POST, value = "/add")
    @RequestMapping(method = RequestMethod.POST)
    @ResponseBody
    public String add(@RequestBody Book book){
        System.out.println(book.getName());
        if(bookService.addBook(book)){
            return "添加成功";
        }
        else {
            return "添加失败";
        }
    }

    //@RequestMapping(method = DELETE, value = "/delete")
    @RequestMapping(method = DELETE)
    @ResponseBody
    public String delete(@RequestParam("isbn") String isbn){
        if(bookService.deleteBook(isbn)){
            return "删除成功";
        }else {
            return "删除失败";
        }
    }
    
    //@RequestMapping(method = PUT, value = "/edit")
    @RequestMapping(method = PUT)
    @ResponseBody
    public String edit(@RequestBody Book book){
        if(bookService.updateBook(book)){
            return "修改成功";
        }else {
            return "修改失败";
        }
    }
    
    //@RequestMapping(method = GET, value = "/find")
    @RequestMapping(method = GET)
    @ResponseBody
    public List<Book> find(){
        return bookService.findBook();
    }
}

说明:

        使用 @RequestMapping(method = ***, value = "/***") 这种样式的话,需要在URL里填入相应的URL地址postman选用对应的method方法,如http://localhost:8080/book/find
        使用@RequestMapping(method = ***)这种样式的话,在postman里选用对应的method方法即可,如http://localhost:8080/book

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 接口类扫描包配置

代码如下:

package misslove.springboot;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan(basePackages = "misslove.springboot.Dao")
public class SpringbootApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }
}

四、代码测试

代码编写完之后,我们进行代码的测试。
启动Application 之后,使用postman工具进行接口的测试。

测试结果如下:

 

添加:

基于SpringBoot开发一个Restful服务,实现增删改查功能

修改:

基于SpringBoot开发一个Restful服务,实现增删改查功能

查询:

基于SpringBoot开发一个Restful服务,实现增删改查功能

删除:

基于SpringBoot开发一个Restful服务,实现增删改查功能

引用: https://www.cnblogs.com/xuwujing/p/8260935.html


项目github地址: https://github.com/twtmiss/Spring-Boot-RestFul/tree/master/MVC_mysql