03 SpringBoot实战 -微头条之首页门户模块(跳转某页面自动展示所有信息+根据hid查询文章全文并用乐观锁修改阅读量)

这篇具有很好参考价值的文章主要介绍了03 SpringBoot实战 -微头条之首页门户模块(跳转某页面自动展示所有信息+根据hid查询文章全文并用乐观锁修改阅读量)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.1 自动展示所有信息

  1. 需求描述: 进入新闻首页portal/findAllType, 自动返回所有栏目名称和id
    03 SpringBoot实战 -微头条之首页门户模块(跳转某页面自动展示所有信息+根据hid查询文章全文并用乐观锁修改阅读量),SpringBoot,spring boot,java,后端

  2. 接口描述

    url地址:portal/findAllTypes

    请求方式:get

    请求参数:无

    响应数据:

    成功

{
   "code":"200",
   "message":"OK"
   "data":{
            [
                {
                    "tid":"1",
                    "tname":"新闻"
                },
                {
                    "tid":"2",
                    "tname":"体育"
                },
                {
                    "tid":"3",
                    "tname":"娱乐"
                },
                {
                    "tid":"4",
                    "tname":"科技"
                },
                {
                    "tid":"5",
                    "tname":"其他"
                }
            ]
    }
}
  1. 代码编写
    PortalController :
package com.sunsplanter.controller;

import com.sunsplanter.service.TypeService;
import com.sunsplanter.utils.Result;
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("portal")
public class PortalController {

    @Autowired
    private TypeService typeService;

    @GetMapping("findAllType")
    public Result findAllTypes(){
        Result result = typeService.findAllTypes();
        return result;
    }
}

TypeService:

package com.sunsplanter.service;

import com.sunsplanter.pojo.Type;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sunsplanter.utils.Result;

public interface TypeService extends IService<Type>{


    Result findAllTypes();
}

TypeServiceImpl:

package com.sunsplanter.service.impl;

import com.sunsplanter.utils.Result;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sunsplanter.mapper.TypeMapper;
import com.sunsplanter.pojo.Type;
import com.sunsplanter.service.TypeService;
@Service
public class TypeServiceImpl extends ServiceImpl<TypeMapper, Type> implements TypeService{

    @Autowired
    private TypeMapper typeMapper;


    @Override
    public Result findAllTypes() {
        //不传条件构造器,即查询全部
        List<Type> types = typeMapper.selectList(null);

        return Result.ok(types);

    }
}

达到的效果是,不需要任何参数, 只要访问portal/findAllType, 就返回news_type表中的所有数据(version和is_deleted除外, 因为已在实体类中注解为版本和逻辑删除)

1.2 - 查询头条详情

  1. 需求描述

03 SpringBoot实战 -微头条之首页门户模块(跳转某页面自动展示所有信息+根据hid查询文章全文并用乐观锁修改阅读量),SpringBoot,spring boot,java,后端
- 用户点击"查看全文"时,向服务端发送新闻id
- 后端根据新闻id查询完整新闻文章信息并返回
- 后端要同时让新闻的浏览量+1

  1. 接口描述

url地址:portal/showHeadlineDetail

请求方式:post

请求参数: Param传参hid

响应数据:

成功则文章来源地址https://www.toymoban.com/news/detail-821512.html

{
    "code":"200",
    "message":"success",
    "data":{
        "headline":{
            "hid":"1",                     // 新闻id 
            "title":"马斯克宣布 ... ...",   // 新闻标题
            "article":"... ..."            // 新闻正文
            "type":"1",                    // 新闻所属类别编号
            "typeName":"科技",             // 新闻所属类别
            "pageViews":"40",              // 新闻浏览量
            "pastHours":"3" ,              // 发布时间已过小时数
            "publisher":"1" ,              // 发布用户ID
            "author":"张三"                 // 新闻作者
        }
    }
}
  1. 代码实现
    1. controller
      @Override
        public Result showHeadlineDetail(Integer hid) {
            /**注意响应的数据是双层嵌套,即data包裹headline,headline包含查询到的属性参数
             * 先用一个名为dataMap的Map以键值对的形式存储返回的属性参数
             * 再将名为data的Map是为一个值,搭配上名为headline的键
             * 存储进一个名为headlineMap的Map中,最终将Map作为参数传入Result,返回Result
             */
            Map dataMap = headlineMapper.queryDetailMap(hid);
            Map headlineMap = new HashMap<>();
            headlineMap.put("headline",dataMap);

            /*乐观锁修改阅读量+1
            *上面已经通过hid查到了所有信息,包括当时的版本号,假设是2
            * 将2直接赋值到新建的headline的Version中
            * 在最后一句update中,MP会帮我们检查,如果此时该条记录的版本号仍为2,
            * 则说明这段时间没有人修改过这条记录,可以正常修改
             */

            Headline headline = new Headline();
            headline.setHid(hid);
            headline.setPageViews((Integer) headlineMap.get("pageViews")+1); //阅读量+1
            headline.setVersion((Integer) headlineMap.get("version")); //设置版本
            headlineMapper.updateById(headline);

            return Result.ok(headlineMap);
        }
  1. HeadlineMapper.java接口
/**
 * 分页查询头条详情
 * @param hid
 * @return
 */
Map selectDetailMap(Integer hid);
      mapperxml:
<!--    Map selectDetailMap(Integer hid);
查询目标(三表拼接):
            "hid":"1",                     // 新闻id 
            "title":"马斯克宣布 ... ...",   // 新闻标题
            "article":"... ..."            // 新闻正文
            "type":"1",                    // 新闻所属类别编号
            "typeName":"科技",             // 新闻所属类别
            "pageViews":"40",              // 新闻浏览量
            "pastHours":"3" ,              // 发布时间已过小时数
            "publisher":"1" ,              // 发布用户ID
            "author":"张三"                 // 新闻作者
            -->

/*
left join news_type t on h.type = t.tid: 这是一个左连接,将 "news_headline" 表与 "news_type" 表连接。
它的条件是 "news_headline" 表的 "type" 字段与 "news_type" 表的 "tid" 字段相匹配。
news_type中tid匹配的行会右拼接在headline表中

left join news_user u on h.publisher = u.uid: 这也是一个左连接,将 "news_headline" 表与 "news_user" 表连接。
连接条件是 "news_headline" 表的 "publisher" 字段与 "news_user" 表的 "uid" 字段相匹配。
news_user中tid匹配的行会右拼接在headline表中(headline先拼type,再拼user)

左连接确保左表保留所有信息,右表仅提取符合条件的元素匹配左表
*/
<select id="selectDetailMap" resultType="map">
    select hid,title,article,type, h.version ,tname typeName ,page_views pageViews
            ,TIMESTAMPDIFF(HOUR,create_time,NOW()) pastHours,publisher
                    ,nick_name author from news_headline h
                        left join news_type t on h.type = t.tid
                                left join news_user u  on h.publisher = u.uid
                                            where hid = #{hid}
</select>

到了这里,关于03 SpringBoot实战 -微头条之首页门户模块(跳转某页面自动展示所有信息+根据hid查询文章全文并用乐观锁修改阅读量)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • su-03t语音模块固件的制作与烧录(stm32实战)

    目录 su-03t简介 管脚定义 ​​智能公元语音固件制作​​ 账号注册 创建产品 产品配置 唤醒词自定义 命令词自定义 发音人配置 其他配置 生成和下载语音固件 固件烧录 下载SDK固件烧录工具 SU-03T驱动分享 SU-03T 是一款低成本、低功耗、小体积的离线语音识别模组,能快速应用

    2024年04月11日
    浏览(23)
  • SpringBoot + Vue 企业门户宣传网站

    项目的初衷是给某某公司做一个产品宣传网页,由于第一次做这种宣传网页没有太多的灵感于是到网上去找了一些模板,但是发现网上现有的模板大多都是基于php语言开发的。但是甲方需要我们使用最新的前后端分离的开发方式来开发,于是决定使用 springboot + vue 来来发这个

    2024年02月06日
    浏览(36)
  • 【RabbitMQ实战】 03 SpringBoot RabbitMQ生产者和消费者示例

    上一节我们写了一段原生API来进行生产和消费的例子。实际上SpringBoot对原生RabbitMQ客户端做了二次封装,让我们使用API的代价更低。 依赖引入 RabbitMQ的配置如下 每个配置的具体含义,详见配置 代码说明 使用RabbitTemplate可以发送消息 这个Controller定义了一个发送的接口,调用

    2024年02月07日
    浏览(32)
  • 代码模版-登录成功后跳转首页

    默认已经安装了 vue-router 路由依赖 已经写好了 src/router/index.js 和 src/views/login.vue 组件了 在 src/views/login.vue 组件中添加这样的 js

    2024年02月15日
    浏览(31)
  • 微信小程序跳转至京东店铺首页

    网上找了很多方法,都是根据打开某一个属于自己的小程序后台,开启获取小程序页面路径的权限。但是都是2020年之前的文章,可能更新后已经无法获取其他小程序的具体页面路径了,所以行不通。 所以在这里介绍一下我的方法 京东小程序appId:wx91d27dbf599dff74 或者点开京东

    2024年02月15日
    浏览(35)
  • B048-cms03-前端首页文章列表展示 页面静态化

    抽取公共资源 抽取导航条和侧边栏 1.新建/WEB-INF/views/common文件夹 2.新建header.jsp和leftMenu.jsp 3.引入Index.jsp和Article.jsp 抽取静态资源 新建topStatic.jsp文件 引入Index.jsp和Article.jsp 新建buttomStatic.jsp 引入Index.jsp和Article.jsp 抽取js文件 在WEB-INF外部/WebContent/static/system/js下新建article文件夹

    2024年02月11日
    浏览(36)
  • 交友项目【完善用户信息&上传用户头像】功能跳转首页

    目录 1:保存用户信息 1.1:接口地址 1.2:流程分析 1.3:代码实现 2.4: 测试 2:上传用户头像 2.1:接口地址 2.2:流程分析 2.3:代码实现 2.4:测试 在进行完手机号码校验完毕之后,我们会进入完善用户信息页面   启动虚拟机:首次登录---完善资料 http://192.168.136.160:3000/proj

    2023年04月12日
    浏览(28)
  • Web实战丨基于django+html+css+js的学院门户网站

    本期内容:基于Django+Html+Css+JavaScript的学院门户网站 项目需求: python django 项目下载地址:https://download.csdn.net/download/m0_68111267/88726654 Web系统与技术课程旨在培养学生对Web系统的设计、开发和管理能力。课程内容包括Web系统的基本概念、体系结构和工作原理,以及常用的Web开

    2024年02月02日
    浏览(46)
  • 若依:如何去掉首页,设置登录后跳转到第一个路由菜单

    若依系统是一个很好用的,开源的前端后台管理系统。 最近公司有一个需求,需要把默认的首页隐藏,登录后直接跳转到路由菜单返回的第一个页面。 查找了不少资料,但是都没有实际的解决方案。  不过最好自己还是实现了这个功能。 步骤如下: 1、首先应当找到项目里

    2023年04月09日
    浏览(148)
  • SpringBoot项目多模块打包部署Docker实战

    我们好多程序员都只关注功能代码的编写,在一些运维工作上则显得略有不足。这篇文章通过介绍最常见的Maven管理的Spring Boot项目多模块打包部署Docker来介绍一下项目部署过程中操作流程和几个需要注意的点。文章假设读者有前面提到的技术点的前置知识,不过没有也没关系

    2024年02月13日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包