微項目:一步一步帶你使用SpringBoot入門(二)

来源:https://www.cnblogs.com/godoforange/archive/2019/10/01/11615740.html
-Advertisement-
Play Games

今天我們來使用JPA做分頁項目並且做講解 如果是新來的朋友請回上一篇 上一篇:微項目(一) maven整合 在pom文件的 依賴中導入以下依賴 然後重啟項目 我們可以看到項目跑起來後運行出來一個tomcat 我們可以看到這裡出現了404錯誤。雖然是錯誤但是出來這個就對了。 下麵我們來配置對項目的增和 ...


今天我們來使用JPA做分頁項目並且做講解

如果是新來的朋友請回上一篇
上一篇:微項目(一)

maven整合

在pom文件的dependencies依賴中導入以下依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

然後重啟項目

我們可以看到項目跑起來後運行出來一個tomcat

我們可以看到這裡出現了404錯誤。雖然是錯誤但是出來這個就對了。

下麵我們來配置對項目的增和查

在做增查之前,我們需要新建倆個包。

下麵我們逐一填東西。

service

service是邏輯層,包括數據處理的方向,和過程。

這裡第一個方法好理解,就是向資料庫內添加文章。

第二個方法查代表的含義是將資料庫分頁,

為什麼這麼做呢?很簡單,如果數據過多無法展示我們只能這麼做。按照ID倒序排列。

package cn.baldorange.anonymous.service;

import cn.baldorange.anonymous.entity.Wall;
import cn.baldorange.anonymous.repository.WallRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import java.util.Date;

@Service
public class WallService {
    @Autowired
    WallRepo wallRepo;

    /**
     * 增加吐槽
     * @param title
     * @param content
     * @return
     */
    public Boolean saveNewWall(String title,String content){
        try {
            String summary = "";
            if (content.length() > 100)
                summary = content.substring(0, 99);
            else summary = content;
            Wall wall = new Wall(title, content, new Date(), summary, "0");
            wallRepo.save(wall);
            return true;
        }catch (Exception e){
            return false;
        }
    }



    /**
     * 獲得匿名牆的所有文章
     * @return
     */
    public Page<Wall> findAllWalls(Integer page,Integer size){
        if(page == null) page = 0;
        if(size == null) size =10;
        PageRequest pageable = PageRequest.of(page, size, Sort.Direction.DESC, "id");
        return wallRepo.findAll(pageable);
    }
}

controller

至於Controller層就比較簡單了,

但是從servlet過來的同學要註意了,@PutMapping這裡可能會給你們帶來疑惑,實際上現在http請求常用的不僅僅是get和post 還有 put delete 等等我們沒見過的,規定是人定的,人也能改。

package cn.baldorange.anonymous.controller;

import cn.baldorange.anonymous.entity.Wall;
import cn.baldorange.anonymous.service.WallService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/walls")
public class Controller {
    @Autowired
    WallService wallService;

    @PutMapping("/saveNewWall")
    public Boolean saveNewWall(@RequestParam String title,@RequestParam String content){
        return wallService.saveNewWall(title,content);
    }


    @GetMapping("/findAllWalls")
    public Page<Wall> findAllWalls(Integer page, Integer size){
        return wallService.findAllWalls(page,size);
    }

}

配置好後我們啟動後訪問這裡:
http://127.0.0.1:8080/walls/findAllWalls

這就是我們所見到的json數據

雖然很亂,但是我們不難發現這裡面有我們資料庫中的內容。還有一些其他的東西。

我們下麵就需要配置介面文件了。

swagger

相信無論是前端還是後端開發,都或多或少地被介面文檔折磨過。前端經常抱怨後端給的介面文檔與實際情況不一致。後端又覺得編寫及維護介面文檔會耗費不少精力,經常來不及更新。其實無論是前端調用後端,還是後端調用後端,都期望有一個好的介面文檔。但是這個介面文檔對於程式員來說,就跟註釋一樣,經常會抱怨別人寫的代碼沒有寫註釋,然而自己寫起代碼起來,最討厭的,也是寫註釋。所以僅僅只通過強制來規範大家是不夠的,隨著時間推移,版本迭代,介面文檔往往很容易就跟不上代碼了。

首先將maven中引入swagger

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

然後我們新建個包最終目錄如下:

swaggerConfig配置文件如下:

package cn.baldorange.anonymous.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class swaggerConfig {
    @Bean
    Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                .apiInfo(new ApiInfoBuilder().description("項目").build());
    }
}

OK我們現在重啟項目:
並訪問這裡

OK我們現在可以使用swagger進行介面測試了,炒雞棒。

分頁技術

資料庫分頁也是在資料庫里寫查詢語句,不同的是查詢的都是指定條數到指定條數的數據,不是一次性把數據全查出來。

當size=2時,返回如下

當size=2,page=2時,返回如下

當size或者page越界時,返回如下

這裡的分頁後的欄位描述如下:

{
    "content": [{}], // 數據列表
    "last": true, // 是否最後一頁
    "totalPages": 1, // 總頁數
    "totalElements": 1, // 數據總數
    "sort": null, // 排序
    "first": true, // 是否首頁
    "numberOfElements": 1, // 本頁數據條數
    "size": 10, // 每頁長度
    "number": 0 // 當前頁序號
}

不難看出,JPA的分頁機制特別好用,簡直不要太爽。

git推上去

OK今天的活就完工了。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 第一種方法導入sys模塊; 2. 第二種方法,使用array模塊,將整數用signed integer 4位元組表示: | Type code C Type Minimum size in bytes | 'b' signed integer 1 | 'B' unsigned integer 1 ...
  • 1.介紹 SQLAlchemy是一個基於Python實現的ORM框架。該框架建立在 DB API之上,使用關係對象映射進行資料庫操作,簡言之便是:將類和對象轉換成SQL,然後使用數據API執行SQL並獲取執行結果。 組成部分: SQLAlchemy本身無法操作資料庫,其必須以來pymsql等第三方插 ...
  • 交換排序的基本思想是兩兩比較待排序元素的關鍵字,發現這兩個元素的次序相反時即進行交換,直到沒有反序的元素為止。本次介紹兩種交換排序,即冒泡排序和快速排序。 1 冒泡排序 1. 1 演算法步驟 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後 ...
  • 未經允許,不得轉載 原作者: "字母哥博客" 本文完整系列出自: "springboot深入淺出系列" 一、使用IntellijIDEA建立第一個spring boot 項目 通常只有專業版付費版才預設帶有Spring Initialzr功能,如果你的IDEA沒有這個選項。可以參照本文末尾《附文:S ...
  • 代碼實現了利用遞歸對數組進行快速排序,其中limit為從已有的隨機數文件中輸入的所要進行排序的數據的數量(生成隨機數並寫入文件的過程已在前篇中寫出)。 演算法主要利用哨兵元素對數據進行分塊,遞歸無限細分之後實現排序。 代碼同樣利用clock函數對演算法的執行時間進行計算以進行演算法的效率評估。 為了驗證排 ...
  • 由於可能需要對分治策略實現二分搜索的演算法效率進行評估,故使用大量的隨機數對演算法進行實驗(生成隨機數的方法見前篇隨筆)。 由於二分搜索需要數據為有序的,故在進行搜索前利用函數庫中sort函數對輸入的數據進行排序。 代碼主要用到的是經典的二分查找加上遞歸。 其中limit為所要從隨機數文件中提取的數據的 ...
  • 01背包 n個物品,v的體積,求最多能裝下的價值 每個物品只能拿一次 https://www.acwing.com/problem/content/2/ 1 #include<bits/stdc++.h> 2 using namespace std; 3 int main(){ 4 int N,V, ...
  • 代碼實現了使用C++進行隨機數的生成,其中NUMBER為所要生成的隨機數的數量,RANGE為生成的隨機數的範圍[0,RANGE]。 生成的隨機數會寫入同文件夾下的random_number.txt文件中,格式為每個數字占一行。 該代碼會在生成隨機數的同時對生成隨機數並完成寫入文件所消耗的時間進行計算 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...