大事件項目記錄13-文章管理接口開發-總

一、文章管理接口。

????????共有5個,分別為:

????????????????1.新增文章;

????????????????2.文章列表(條件分頁) ;

????????????????3.獲取文章詳情;

????????????????4.更新文章;

????????????????5.刪除文章。

二、詳解。

????????1.新增文章。

????????ArticleController.java:

    @PostMappingpublic Result add(@RequestBody Article article){articleService.add(article);return Result.success();}

????????ArticleService.java:

    //新增文章void add(Article article);

????????ArticleServiceInterface.java:

    @Overridepublic void add(Article article) {//補充屬性值article.setCreateTime(LocalDateTime.now());article.setUpdateTime(LocalDateTime.now());Map<String,Object> map = ThreadLocalUtil.get();Integer UserId = (Integer) map.get("id");article.setCreateUser(UserId);articleMapper.add(article);}

????????ArticleMapper.java:

    // 新增@Insert("insert into article(title,content,cover_img,state,category_id,create_user,create_time,update_time) " +"values(#{title},#{content},#{coverImg},#{state},#{categoryId},#{createUser},#{createTime},#{updateTime})")void add(Article article);

????????使用Postman運行測試:

**********************************************參數校驗****************************************************?? ? ? ? ?

???????? 實體類添加相關參數校驗的注解,并添加@Validated注解:??

????????當已有的注解不能滿足所有的校驗需求,特殊的情況需要自定義校驗(自定義校驗注解) 。

具體步驟為:

????????????????1.自定義注解State

????????????????2. 自定義校驗數據的類StateValidation實現ConstraintValidator接囗

????????????????3.在需要校驗的地方使用自定義注解。? ? ?

????????對于參數state進行自定義參數校驗:

? ? ? ? 新建子包annotate,并新建注解State.java

@Documented //元注解
@Target(ElementType.FIELD) //元注解
@Retention(RetentionPolicy.RUNTIME) //元注解
@Constraint(validatedBy = {StateValidation.class}) //指定提供校驗規則的類
public @interface State {//提供校驗失敗的提示信息String message() default "State參數的值只能為已發布或者草稿";//指定分組Class<?>[] groups() default {};//負載 獲取State注解的附加信息Class<? extends Payload>[] payload() default {};}

? ? ? ? 新建子包Validation,并新建自定義校驗數據的類StateValidation實現ConstraintValidator接囗:

public class StateValidation implements ConstraintValidator<State,String> {/**** @param value 將來要校驗的信息* @param constraintValidatorContext* @return false--> 校驗不通過  反之,通過*/@Overridepublic boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {//提供校驗規則if(value == null){return false;}if(value.equals("已發布") || value.equals("草稿")){return true;}return false;}
}

? ? ? ? 最后在實體類Article上使用注解即可:

? ? ? ? 使用Postman測試:

????????

????????2.文章列表(條件分頁) 。

????????ArticleController.java:

    @GetMappingpublic Result<PageBean<Article>> list(Integer pageNum,Integer pageSize,@RequestParam(required = false) Integer categoryId,@RequestParam(required = false) String state){PageBean<Article> pb = articleService.list(pageNum,pageSize,categoryId,state);return Result.success(pb);}

????????ArticleService.java:

    //條件分頁列表查詢PageBean<Article> list(Integer pageNum, Integer pageSize, Integer categoryId, String state);

? ? ? ? pom.xml添加分頁插件PageHelper

    <!--PageHelper坐標--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version></dependency>

????????ArticleServiceInterface.java:

    @Overridepublic PageBean<Article> list(Integer pageNum, Integer pageSize, Integer categoryId, String state) {//1.創建PageBean對象PageBean<Article>  pb = new PageBean<>();//2.開啟分頁查詢 PageHelperPageHelper.startPage(pageNum,pageSize);//3.調用MapperMap<String,Object> map = ThreadLocalUtil.get();Integer userId = (Integer) map.get("id");List<Article> as = articleMapper.list(userId,categoryId,state);//Page中提供了方法,可以獲取PageHelper分頁查詢后 得到的總記錄條數和當前頁數據Page<Article> p = (Page<Article>) as;//將數據填充到PageBean對象中pb.setTotal(p.getTotal());pb.setItems(p.getResult());return pb;}

????????ArticleMapper.java:

List<Article> list(Integer userId, Integer categoryId, String state);

? ? ? ? 新建動態SQL文件,在resources目錄下新建與ArticleMapper.java所在位置同樣的文件路徑,并新建文件ArticleMapper.xml,命名與ArticleMapper必須相同:

? ? ?ArticleMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.azhyyi.mapper.ArticleMapper"><!--動態SQL--><select id="list" resultType="org.azhyyi.entity.Article">select * from article<where><if test="categoryId!= null">category_id=#{categoryId}</if><if test="state!= null">and state=#{state}</if>and create_user=#{userId}</where></select>
</mapper>

????????使用Postman運行測試:


????????????????

????????3.獲取文章詳情;

????????4.更新文章;

????????5.刪除文章。

????????ArticleController.java:

    @GetMapping("/detail")public Result<Article> detail(Integer id){Article c = articleService.findById(id);return Result.success(c);}@PutMappingpublic Result update(@RequestBody @Validated Article article){articleService.update(article);return Result.success();}@DeleteMappingpublic Result delete(Integer id){articleService.deleteById(id);return Result.success();}

????????ArticleService.java:

????????ArticleServiceInterface.java:

    @Overridepublic Article findById(Integer id) {Article a = articleMapper.findById(id);return a;}@Overridepublic void deleteById(Integer id) {articleMapper.deleteById(id);}@Overridepublic void update(Article article) {article.setUpdateTime(LocalDateTime.now());articleMapper.update(article);}

????????ArticleMapper.java:

    //獲取文章詳情@Select("select * from article where id=#{id}")Article findById(Integer id);//刪除文章@Delete("delete from article where id=#{id}")void deleteById(Integer id);//更新文章@Update("update article set title=#{title},content=#{content},cover_img=#{coverImg}," +"state=#{state},category_id=#{categoryId},update_time=#{updateTime}" +"where id=#{id} ")void update(Article article);

????????使用Postman測試,這三個接口均通過測試。

????????至此,大事件的后端接口基本開發完畢。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89652.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89652.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89652.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何防止內部威脅:服務器訪問控制與審計策略

內部威脅是指來自組織內部的用戶或設備對服務器和數據的潛在安全威脅。這些威脅可能是由于惡意行為、疏忽或配置錯誤造成的。為了防止內部威脅&#xff0c;必須建立強大的訪問控制和審計策略&#xff0c;確保服務器的安全性和數據完整性。 1. 什么是內部威脅&#xff1f; 1.1 …

科技賦能電網安全:解析絕緣子污穢度在線監測裝置的核心技術與應用價值

絕緣子是電力系統中保障輸電線路安全運行的關鍵設備&#xff0c;其表面污穢積累可能引發閃絡事故&#xff0c;導致線路跳閘甚至電網癱瘓。傳統的人工巡檢方式存在效率低、時效性差等問題&#xff0c;而絕緣子污穢度在線監測裝置通過實時數據采集與分析&#xff0c;為電網安全運…

實際開發如何快速定位和解決死鎖?

一、死鎖的本質與常見場景 1. 死鎖的四大必要條件 互斥:資源同一時間只能被一個線程持有。占有并等待:線程持有資源的同時請求其他資源。不可搶占:資源只能被持有者主動釋放。循環等待:多個線程形成資源的循環依賴鏈。2. 常見死鎖場景 數據庫事務死鎖:-- 事務1 BEGIN; UP…

uniapp實現圖片預覽,懶加載,下拉刷新等

實現的功能 懶加載 lazy-load --對小程序起效果圖片預覽下拉刷新觸底加載更多底下設置安全距離env(safe-area-inset-bottom)右下角固定圖標置頂及刷新功能 效果如圖&#xff1a; 預覽 代碼 <template><view class"image-classify"><uni-segmente…

FFmpeg開發筆記(七十七)Android的開源音視頻剪輯框架RxFFmpeg

《FFmpeg開發實戰&#xff1a;從零基礎到短視頻上線》一書的“第 12 章 FFmpeg的移動開發”介紹了如何使用FFmpeg在手機上剪輯視頻&#xff0c;方便開發者更好地開發類似剪映那樣的視頻剪輯軟件。那么在Android系統上還有一款國產的開源視頻剪輯框架RxFFmpeg&#xff0c;通過該…

小測一下筆記本電腦的VMXNET3和E1000e網卡性能

正文共&#xff1a;999 字 14 圖&#xff0c;預估閱讀時間&#xff1a;1 分鐘 通過上次操作&#xff0c;我們已經實現了將筆記本電腦的ESXi版本從6.0升級到了6.7&#xff08;VMware ESXi 6.7可以成功識別機械硬盤了&#xff09;&#xff0c;并且測得以電腦中的虛擬機作為server…

K8S初始化master節點不成功kubelet.service failed(cgroup driver配置問題)

一、背景 安裝k8s集群&#xff0c;初始化master節點一直不成功。 二、排查 查看日志 ps -ef | grep kube-apiserver [rootzjy01 home]# ps -ef | grep kube-apiserver root 85663 4637 0 12:41 pts/1 00:00:00 grep --colorauto kube-apiserver [rootzjy01 home…

C++ 標準模板庫算法之 transform 用法

目錄 1. 說明 2. 用法示例 1. 說明 std::transform 是一種多功能算法&#xff0c;用于將已知函數應用于一個或多個范圍內的元素&#xff0c;并將結果存儲在輸出范圍內。它主要有兩種形式&#xff1a;一元運算和二元運算。具體來說是在 <algorithm> 標頭中。函數聲明&am…

開源 C# .net mvc 開發(六)發送郵件、定時以及CMD編程

文章的目的為了記錄.net mvc學習的經歷。本職為嵌入式軟件開發&#xff0c;公司安排開發文件系統&#xff0c;臨時進行學習開發&#xff0c;系統上線3年未出沒有大問題。開發流程和要點有些記憶模糊&#xff0c;趕緊記錄&#xff0c;防止忘記。 嵌入式 .net mvc 開發&#xff…

OpenCV圖像邊緣檢測

一、邊緣檢測基礎概念 邊緣檢測是圖像處理中最基本也是最重要的操作之一&#xff0c;它能識別圖像中亮度或顏色急劇變化的區域&#xff0c;這些區域通常對應物體的邊界。OpenCV提供了多種邊緣檢測方法&#xff0c;從傳統的算子到基于深度學習的現代方法。 1.1 為什么需要邊緣…

(Arxiv-2024)自回歸模型優于擴散:Llama用于可擴展的圖像生成

自回歸模型優于擴散&#xff1a;Llama用于可擴展的圖像生成 paper是香港大學發布在Arxiv2024的工作 paper title:Autoregressive Model Beats Diffusion: Llama for Scalable Image Generation Code:鏈接 Abstract 我們介紹了LlamaGen&#xff0c;一種新的圖像生成模型系列&am…

高頻SQL50題 第九天 | 1164. 指定日期的產品價格、1204. 最后一個能進入巴士的人、1907. 按分類統計薪水

1164. 指定日期的產品價格 題目鏈接&#xff1a;https://leetcode.cn/problems/product-price-at-a-given-date/description/?envTypestudy-plan-v2&envIdsql-free-50 狀態&#xff1a;已完成 考點&#xff1a; group by select語句中使用聚合函數max()&#xff1a;獲取…

Java內存模型(JMM)深度解析

1. 引言 在當今多核處理器和并發編程盛行的時代&#xff0c;Java工程師們在構建高性能、高可用系統時&#xff0c;常常會面臨復雜的線程安全挑戰。數據不一致、競態條件、死鎖等問題&#xff0c;不僅難以調試&#xff0c;更可能導致系統行為異常。這些問題的根源&#xff0c;往…

參數僅 12B! FLUX.1-Kontext-dev 實現高效文本驅動圖像編輯,性能媲美 GPT-4o

FLUX.1-Kontext-dev 是由 Black Forest Labs 團隊于 2025 年 6 月 26 日聯合發布的生成與編輯圖像的流匹配&#xff08;flow matching&#xff09;模型。FLUX.1 Kontext 的圖像編輯是廣泛意義上的圖像編輯&#xff0c;不僅支持圖像局部編輯&#xff08;對圖像中的特定元素進行針…

Robot---能打羽毛球的機器人

1 前言 Robot系列主要介紹一些比較有意思的機器人&#xff0c;前面的博客文章中也給讀者朋友們展示了一些&#xff1a; 《人形機器人---越來越像人了》 《自動駕駛---兩輪自行車的自主導航》 《自動駕駛---會打架的“球形機器人”》 《Robot---SPLITTER行星探測機器人》 《Robo…

瀏覽器默認非安全端口列表

瀏覽器默認非安全端口列表: https://chromium.googlesource.com/chromium/src.git//refs/heads/master/net/base/port_util.cc 0, // Not in Fetch Spec.1, // tcpmux7, // echo9, // discard11, // systat13, // daytime15, // netstat17, …

在線租房平臺源碼+springboot+vue3(前后端分離)

大家好&#xff0c;今天給大家帶來一個非常完善的 在線租房平臺。大家可用學習下系統的設計和源碼風格。 視頻演示 在線租房平臺源碼springbootvue3 圖片演示 技術棧 后端 技術框架&#xff1a;JDK8SpringBoot Mybatis-Plus 數據庫&#xff1a;Mysql8 前端 核心框架 - Vue…

android核心技術摘要

Android APP 默認賦予權限apk簽名 apk簽名&#xff1a;https://blog.csdn.net/u014763302/article/details/149055647apksign使用反法&#xff1a;[https://www.cnblogs.com/fengxing999/p/11978037.html]從Android源碼生成系統簽名文件&#xff1a;https://blog.csdn.net/wenz…

離線遷移 Conda 環境到 Windows 服務器:用 conda-pack 擺脫硬路徑限制

背景&#xff1a; 在進行深度學習算法的環境部署時&#xff0c;由于生產服務器被徹底隔離外網&#xff0c;只能把conda中env文件夾中的虛擬環境文件夾從開發機直接拷到離線 Windows 服務器。 其中一運行labelimg就報錯&#xff1a; Fatal error in launcher: Unable to creat…

vue3+原生javascript 手寫日期時間選擇框 滾動選擇可輸入

需求&#xff1a; web端 想要跟手機端一樣選擇年月日時分&#xff0c;通過滾動選擇 實現效果圖&#xff1a; 理念&#xff1a; 1.年月日時分 分別為單個輸入框&#xff0c;用來做輸入修改 2.div把輸入框拼接起來&#xff0c;顯示出一個日期框的樣子 3.年月日時分 下拉給默…