尋找寫程式碼感覺(六)之列表查詢介面開發及返回結果的統一處理

久曲健 發表於 2021-10-13

一、寫在前面

有時候怕自己腦子鏽掉(傻掉),得總用,怎麼用?學習呀,這樣可以最大化調動思維。

出院有幾天了,不是我自己懶,是我真的坐不了太長時間,基本是坐著半小時嗎,躺著一小時.

這幾天好些了,可以坐1個多小時了,但是腰還是疼,突然感覺,能活著太不容易了。

這篇文章,停滯了有兩天了,今天還是堅持下要接著更新,不管怎樣,還是要堅持的。

這種感覺怎麼說呢,就像偶得武功祕籍一樣,看到上面的武功太精秒了,其實我知道,源於我對程式設計的熱愛,僅此問而罷了,與其他無關。

二、準備資料

簡答你得說我在資料庫裡準備一些資料,sql如下:

#電子書表

drop table if exists 'ebook';

create table ebook
(

    `id`            bigint NOT NULL comment 'id',
    `name`          varchar(50) COMMENT '名稱',
    `category1 _id` bigint comment '分類1',
    `category2_ id` bigint comment '分類2',
    `description`   varchar(200) comment '描述',
    `cover`         varchar(200) comment '封面',
    `doc_ count`    int comment ' 文件數',
    `view_ count`   int comment ' 閱讀數',
    `vote_ count`   int comment '點贊數',
    PRIMARY KEY (`id`)

) engine = innodb default charset = utf8mb4 comment ='電子書';

insert into ebook (id, name, description) values (1,' Spring Boot入門教程 ',' 零基礎入門Java開發,企業級應用開發最佳首選框架');
insert into ebook(id, name, description) values (2,' Vue 入門教程 ',' 零基礎入門Vue開發,企業級應用開發最佳#電子書表');
insert into ebook(id, name, description) values (3,' Web 自動化入門教程 ',' Web自動化測試與Selenium 3.0從入門到實踐 #電子書表');

三、使用程式碼生成器生成實體及介面

不會用?

簡單,傳送門尋找寫程式碼感覺(五)之Mybatis官方程式碼生成器的使用

寫到這裡,我突然發現,好像比Spring Boot JPA好些呢,是因為不用寫SQL嘛,哈哈哈

生成準備XML,示例如下:

<table tableName="ebook" domainObjectName="EBook"/>

四、編寫Service及介面程式碼

1、編寫Service程式碼

Service示例程式碼如下:

package com.rongrong.wiki.service;

import com.rongrong.wiki.domain.EBook;
import com.rongrong.wiki.mapper.EBookMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author rongrong
 * @version 1.0
 * @description
 * @date 2021/10/13 10:09
 */
@Service
public class EBookService {

    @Resource
    private EBookMapper eBookMapper;

    public List<EBook> list() {
        return eBookMapper.selectByExample(null);
    }
}

2、統一返回結果處理

統一處理返回結果的好處:

為了讓前端能夠統一處理邏輯(登入、許可權校驗等等),需要統一後端的返回值,簡單來說就是包裝下哈哈,就像糖果一樣,有個包裝就是好看,哈哈哈,看到這的兄弟別打我哈

示例程式碼如下:;

package com.rongrong.wiki.resp;

public class CommonResp<T> {

    /**
     * 業務上的成功或失敗
     */
    private boolean success = true;

    /**
     * 返回資訊
     */
    private String message;

    /**
     * 返回泛型資料,自定義型別
     */
    private T content;

    public boolean getSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getContent() {
        return content;
    }

    public void setContent(T content) {
        this.content = content;
    }

    @Override
    public String toString() {
        final StringBuffer sb = new StringBuffer("ResponseDto{");
        sb.append("success=").append(success);
        sb.append(", message='").append(message).append('\'');
        sb.append(", content=").append(content);
        sb.append('}');
        return sb.toString();
    }
}

3、編寫介面

示例程式碼如下:

package com.rongrong.wiki.controller;

import com.rongrong.wiki.domain.EBook;
import com.rongrong.wiki.resp.CommonResp;
import com.rongrong.wiki.service.EBookService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author longrong.lang
 * @version 1.0
 * @description
 */
@RestController
@RequestMapping("/ebook")
public class EBookController {

    @Resource
    private EBookService eBookService;

    @GetMapping("/list")
    public CommonResp list() {
        CommonResp<List<EBook>> resp = new CommonResp<>();
        List<EBook> list = eBookService.list();
        resp.setMessage("執行查詢成功!");
        resp.setContent(list);
        return resp;
    }
}

五、測試介面

結果如下:

GET http://localhost:8888/ebook/list

HTTP/1.1 200 
Content-Type: application/json
Transfer-Encoding: chunked
Date: Wed, 13 Oct 2021 09:35:57 GMT
Keep-Alive: timeout=60
Connection: keep-alive

{
  "success": true,
  "message": "執行查詢成功!",
  "content": [
    {
      "id": 1,
      "name": " Spring Boot入門教程 ",
      "category1Id": null,
      "category2Id": null,
      "description": " 零基礎入門Java開發,企業級應用開發最佳首選框架",
      "cover": null,
      "docCount": null,
      "viewCount": null,
      "voteCount": null
    },
    {
      "id": 2,
      "name": " Vue 入門教程 ",
      "category1Id": null,
      "category2Id": null,
      "description": " 零基礎入門Vue開發,企業級應用開發最佳#電子書表",
      "cover": null,
      "docCount": null,
      "viewCount": null,
      "voteCount": null
    },
    {
      "id": 3,
      "name": " Web 自動化入門教程 ",
      "category1Id": null,
      "category2Id": null,
      "description": " Web自動化測試與Selenium 3.0從入門到實踐 #電子書表",
      "cover": null,
      "docCount": null,
      "viewCount": null,
      "voteCount": null
    }
  ]
}

六、寫在最後

簡直太折磨人了,現在這老腰又開始疼了,有時間接著更新,今天可能有點累著了,好麻煩!!