springboot网站开发0201-使用MybatisPlus查询数据库信息返回前端渲染

news2024/11/15 10:58:42

springboot网站开发0201-使用MybatisPlus查询数据库信息返回前端渲染!这一次我们将会详细的展示一个完整的数据库查询案例,从查询数据库到返回前端渲染页面完成一个流程。


首先,我们需要清楚,本次业务需求是,查询新闻分类表的内容,把所有新闻分类信息,返回给前端渲染使用。

如图,我们可以看见,前端页面新闻分类列表其实仅需要2个属性值,一个是分类的名字,一个是分类的id.

 

因此,为了提升客户体验度,我们封装了一个页面模型对象。里面仅仅给他返回2个属性值即可。可以提升前端页面渲染的速度,减轻客户手机的cpu压力。


接下来,我们就需要考虑一件事,我们到底是需要什么样的新闻分类列表曝光给前端看见。

比如:业务场景之一(我们只需要把当前已经有发布过新闻稿件的分类列表信息,给前端客户看见。尚未发布过新闻稿件的分类列表,无需给前端看见。)

如果是这样子,那就需要前提去查询一下,当前新闻表(sg_airticle)里面新闻稿件状态为正常的所属分类id了。然后做一个汇总,就可以拿到当前有新闻稿件的分类id集合了。

然后再根据这个分类id集合去查询新闻分类标题(sg_category)里面的详情信息。获取具体的分类属性值信息。

*********---------------*********

场景模拟之二:如果我们不关心当前新闻分类下面是否有没有新闻稿件,那就简单多了,直接干脆一点,直接查询分类表信息,返回就行了。省去前面查询新闻表的步骤了。


经过以上分析,我们本次为大家展示的是场景模拟之一的情况。先去查询新闻表里状态为正常的新闻稿件,获取他们的分类id。

package com.blog.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.blog.constants.SystemConstants;
import com.blog.domain.ResponseResult;
import com.blog.domain.entity.Article;
import com.blog.domain.entity.Category;
import com.blog.domain.vo.CategoryVo;
import com.blog.mapper.CategoryMapper;
import com.blog.service.ArticleService;
import com.blog.service.CategoryService;
import com.blog.utils.BeanCopyUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * 分类表(Category)表服务实现类
 *
 * @author makejava
 * @since 2023-08-21 14:27:46
 */
@Service("categoryService")
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements CategoryService {

    @Autowired
    private ArticleService articleService;

    @Override
    public ResponseResult getCategoryList() {
        //查询文章表,状态为已发布
        LambdaQueryWrapper<Article> articleWrapper = new LambdaQueryWrapper<>();
        articleWrapper.eq(Article::getStatus, SystemConstants.ARTICEL_STATUS_NORMAL);
        List<Article> articleList = articleService.list(articleWrapper);
        //获取文章分类id,并且去重
        Set<Long> categoryIds = articleList.stream()
                .map(Article::getCategoryId)
                .collect(Collectors.toSet());

        //查询分类表,
        List<Category> categories = listByIds(categoryIds);
        categories = categories.stream()
                .filter(category -> SystemConstants.STATUS_NORMAL.equals(category.getStatus())).collect(Collectors.toList());
        //封装vo-前端页面需要的实体类集合,只需要极少数的属性值即可因此要做个提取封装
        List<CategoryVo> categoryVos = BeanCopyUtils.copyBeanList(categories, CategoryVo.class);
        return ResponseResult.okResult(categoryVos);
    }
}

如图代码,我们第一步,就是去查询文章表,状态为已发布(正常显示)的新闻集合,

List<Article> articleList = articleService.list(articleWrapper);

 得到了一个新闻的集合对象,


//获取文章分类id,并且去重
        Set<Long> categoryIds = articleList.stream()
                .map(Article::getCategoryId)
                .collect(Collectors.toSet());

这一步就是提取分类id信息的操作。使用了流操作。回头单独会讲一下流操作的内容。

返回了一个Set集合,不允许有重复的情况,Set集合里面的元素属性是,不可以重复,且无序。


//查询分类表,
        List<Category> categories = listByIds(categoryIds);
        categories = categories.stream()
                .filter(category -> SystemConstants.STATUS_NORMAL.equals(category.getStatus())).collect(Collectors.toList());

 如图代码,我们使用了mybatisPlus插件自带的方法,listByIds

default java.util.List<T> listByIds(java.util.Collection<? extends java.io.Serializable> idList)

如图,插件告诉我们,这个方法返回了还是一个list集合,它的参数类型是一个集合。

随后,我们做了一个数据过滤,只提取出来了状态为正常的分类信息。()

 

 

数据表内状态码数据类型是char(单字符),对应到java类型是String。


//封装vo-前端页面需要的实体类集合,只需要极少数的属性值即可因此要做个提取封装
        List<CategoryVo> categoryVos = BeanCopyUtils.copyBeanList(categories, CategoryVo.class);

 最后,再次封装提取成前端页面需要使用的页面模型对象。就使用到了我们之前自定义的一个工具类。


有了持久层和业务层的协助,我们就可以看前端控制器的代码了。

package com.blog.controller;

import com.blog.domain.ResponseResult;
import com.blog.service.CategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/category")
public class CategoryController {
    @Autowired
    private CategoryService categoryService;

    @GetMapping("/getCategoryList")
    public ResponseResult getCategoryList(){
       return categoryService.getCategoryList();
    }
}

 控制器代码非常简单。只需要设置好请求的业务路径,调用业务层实现类的方法,直接返回对象即可。前端会从对象中提取它们想要的数据。

 为了统一规范,我们前端返回数据统一都是有这个工具类,封装起来。方便协调。

下一个小节,我们给大家展示一下,前端VUE里面的代码情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1465163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 仿信号格子强度动画效果实现

效果图 在 Android 中&#xff0c;如果你想要绘制一个圆角矩形并使其居中显示&#xff0c;你可以使用 Canvas 类 drawRoundRect 方法。要使圆角矩形居中&#xff0c;你需要计算矩形的位置&#xff0c;这通常涉及到确定矩形左上角的位置&#xff08;x, y&#xff09;&#xff0…

【kubernetes】二进制部署k8s集群之cni网络插件flannel和calico工作原理(中)

↑↑↑↑接上一篇继续部署↑↑↑↑ 目录 一、k8s集群的三种接口 二、k8s的三种网络模式 1、pod内容器之间的通信 2、同一个node节点中pod之间通信 3、不同的node节点的pod之间通信 Overlay Network VXLAN 三、flannel网络插件 1、flannel插件模式之UDP模式&#xff0…

计算机视觉学习指南(划分为20个大类)

计算机视觉的知识领域广泛而庞杂&#xff0c;涵盖了众多重要的方向和技术。为了更好地组织这些知识&#xff0c;我们需要遵循无交叉无重复&#xff08;Mutually Exclusive Collectively Exhaustive&#xff0c;MECE&#xff09;的原则&#xff0c;并采用循序渐进的方式进行分类…

数据库增删改查

DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML: 数据操作语言&#xff0c;用来对数据库表中的数据进行增删改DQL: 数据查询语言&#xff0c;用来查询数据库中表的记录DCL: 数据控制语言&#xff0c;用来创建数据库用户、控制数…

智能运维服务指的是哪些?智能运维阶段有哪些

智能运维服务通常包含哪些关键组成部分&#xff1f;它们在IT管理中的作用和重要性&#xff1f;智能运维的发展可以分为哪些主要阶段&#xff1f;每个阶段的核心技术或实践有哪些&#xff0c;它们是如何推动运维工作向更高水平的自动化和智能化发展的&#xff1f; 智能运维服务…

8.CSS层叠继承规则总结

CSS 层叠继承规则总结 经典真题 请简述一下 CSS 中的层叠规则 CSS 中的层叠继承规则 在前面《CSS属性的计算过程》中&#xff0c;我们介绍了每一个元素都有都有所有的属性&#xff0c;每一个属性都会通过一系列的计算过程得到最终的值。 这里来回顾一下计算过程&#xff0…

K8S—Pod详解

目录 一 Pod基础概念 1.1 Pod是什么 1.2 为什么要使用Pod&#xff1f;Pod在K8S集群中的使用方式&#xff1f; 1.3 基础容器pause 二 Pod的分类 2.1 自主式Pod和控制器管理的Pod 2.2 容器的分类 2.2.1 基础容器&#xff08;infrastructure container&#xff09; 2.2.2…

【Linux】Vagrant搭建Linux环境

Vagrant Vagrant是一个基于Ruby的工具&#xff0c;用于创建和部署虚拟化开发环境。它使用Oracle的开源VirtualBox虚拟化系统&#xff0c;使用 Chef创建自动化虚拟环境。 安装Vagrant 从Vagrant官网下载安装包&#xff0c;执行安装。 安装VirtualBox 从官网下载VirtualBo…

企业品牌软文发布在媒体上,有啥用呢

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 通常企业都会建立自己的媒体矩阵&#xff0c;在公众号&#xff0c;视频号&#xff0c;抖音&#xff0c;网易号&#xff0c;搜狐号等企业品牌矩阵中发布软文&#xff0c;公司动态&#xf…

智慧城市|SHARE 孪影F2 PRO 在数字化城市平台中的应用。

在数字化时代背景下&#xff0c;乌审旗政府积极响应实景三维中国建设工作&#xff0c;以数字乌审作为全旗智慧城市总框架、总平台&#xff0c;致力提升城市治理现代化水平&#xff0c;结合互联网、云计算、人工智能等信息技术建设新型智慧城市&#xff0c;推进城市发展新理念。…

现货黄金怎么交易

现货黄金是投资者广泛关注的一种黄金交易方式。与期货黄金相比&#xff0c;现货黄金交易更加简单、灵活&#xff0c;同时也更容易掌握。本文将介绍现货黄金交易的基本知识&#xff0c;以及投资者应该如何进行现货黄金交易。 一、现货黄金交易基础知识 什么是现货黄金&#xf…

ES6内置对象 - Set

Set&#xff08;es6提供的一种数据结构&#xff0c;类似数组&#xff0c;是一个集合&#xff0c;可以存储任何类型的元素且唯一、不重复&#xff0c;so,多用于元素去重&#xff09; 如上图&#xff0c;Set数据结构自带一些方法 1.Set对象创建 let a new Set([1,2,3,3,1,2,4,…

4个为数据程序员量身打造的PyCharm插件

SonarLint 插件可以帮助开发人员在编码过程中发现潜在的代码问题&#xff0c;提高代码质量。可在实时编码过程中发现并修复代码问题&#xff0c;类似于拼写检查器。它不仅仅是一个代码检查工具&#xff0c;更像是代码质量助手。 PyCharm 是一款由 JetBrains 公司推出的强大的 …

Ubuntu系统本地部署Inis博客结合内网穿透实现远程访问本地站点

文章目录 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总…

超级实用的python代码片段汇总和详细解析(16个)

目录 1. 生成随机文本 2. 计算文本文件中的字数 3. 替换文件文件中的字串 4. 多文件名的批量替换 5. 从网站提取数据 6. 批量下载图片 7.批量删除空文件夹 8.Excel表格读写 9.合并Excel表格工作簿 10.数据库SQL查询 11. 系统进程查杀 12.图像尺寸调整和裁剪 13.图…

蓝桥杯STM32G431RBT6实现按键的单击、双击、长按的识别

阅读引言&#xff1a; 是这样&#xff0c; 我也参加了这个第十五届的蓝桥杯&#xff0c;查看竞赛提纲的时候发现有按键的双击识别&#xff0c; 接着我就自己实现了一个按键双击的识别&#xff0c;但是识别效果不是特别理想&#xff0c;偶尔会出现识别不准确的情况&#xff0c;接…

测试环境搭建整套大数据系统(六:搭建sqoop)

一&#xff1a;下载安装包 https://archive.apache.org/dist/sqoop/ 二&#xff1a;解压修改配置。 tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /opt cd /opt mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop-1.4.7修改环境变量 vi /etc/profile#SQOOP_HOME export SQOOP_…

outlook邮箱后缀怎么设置?邮箱后缀问题?

outlook邮箱后缀如何修改&#xff1f;微软有哪些后缀的邮箱&#xff1f; Outlook不仅提供了稳定的邮件收发服务&#xff0c;还允许用户根据个人喜好和需求自定义邮箱后缀。那么&#xff0c;Outlook邮箱后缀究竟该如何设置呢&#xff1f;下面&#xff0c;蜂邮EDM将一步步指导您…

【FPGA】VHDL:小型出勤系统设计

附源代码&#xff0c;一定能实现&#xff01; 目录 EDA设计练习题&#xff1a; 实验要求如下&#xff1a; 思路分析&#xff1a; 代码 99进制计数器 码转换 顶层文件 特别注意 测试 编译通过 结果展示 RTL视图 技术映射视图 软件&#xff1a;Quartus II 13.0 (64…

软件测试需要学习什么?好就业吗?

目前来说的话&#xff0c;整个it 都不太好&#xff01;但是既然你问了&#xff0c;我也就告诉你吧&#xff01; 1功能测试 &#xff1a;前端和后端&#xff0c;前端就是简单的页面&#xff0c;你需要考虑的是&#xff1a;必填项&#xff0c;边界值&#xff0c;组合&#xff0c…