首页 > 其他分享 >个人博客项目笔记_02

个人博客项目笔记_02

时间:2024-04-10 20:03:02浏览次数:20  
标签:02 queryWrapper LambdaQueryWrapper 笔记 博客 limit Result Article public

1. 统一异常处理

不管是controller层还是service,dao层,都有可能报异常,如果是预料中的异常,可以直接捕获处理,如果是意料之外的异常,需要统一进行处理,进行记录,并给用户提示相对比较友好的信息。

package com.cherriesovo.blog.handler;

import com.cherriesovo.blog.vo.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

//对加了@Controller注解的方法进行拦截处理 AOP的实现
@ControllerAdvice
public class AllExceptionHandler {
    //进行异常处理,处理Exception.class的异常
    @ExceptionHandler(Exception.class)
    @ResponseBody //返回json数据
    public Result doException(Exception ex){
        ex.printStackTrace();
        return Result.fail(-999,"系统异常");
    }

}

2. 首页-最热文章

2.1 接口说明

接口url:/articles/hot

请求方式:POST

请求参数:

参数名称 参数类型 说明

返回数据:

{
    "success": true,
    "code": 200,
    "msg": "success",
    "data": [
        {
            "id": 1,
            "title": "springboot介绍以及入门案例",
        },
        {
            "id": 9,
            "title": "Vue.js 是什么",
        },
        {
            "id": 10,
            "title": "Element相关",
            
        }
    ]
}

2.2 Controller

ArticleController:

@PostMapping("hot")
    public Result hotArticle(){
        int limit = 5;
        return articleService.hotArticle(limit);
    }

2.3 Service

LambdaQueryWrapper<Article>QueryWrapper<Article> 都是 MyBatis-Plus 提供的用于构建查询条件的包装器,它们之间的主要区别在于构建查询条件的方式不同。

  1. LambdaQueryWrapper
    • LambdaQueryWrapper 是基于 Lambda 表达式的方式构建查询条件的,可以使用 Lambda 表达式直接引用实体类的属性。
    • 通过 Lambda 表达式引用属性,可以避免硬编码字段名称,使代码更加清晰易懂。
    • 由于使用了 Lambda 表达式,编译器可以在编译时进行类型检查,避免一些常见的拼写错误或属性不存在的问题。
  2. QueryWrapper
    • QueryWrapper 是传统的方式构建查询条件的,需要通过字符串指定字段名,比较符号等。
    • 在构建查询条件时,需要手动输入属性的名称,容易出现拼写错误或者属性不存在的问题。
    • 不具备 Lambda 表达式的类型检查和编译时安全性。

因此,如果项目采用了 Java 8 及以上的版本,推荐使用 LambdaQueryWrapper,它更加直观、类型安全,并且代码更加清晰易读。而如果项目不支持 Lambda 表达式或者需要与旧的代码兼容,可以继续使用 QueryWrapper

queryWrapper.orderByDesc(Article::getViewCounts)详解:

这行代码使用了 LambdaQueryWrapperorderByDesc 方法,用于指定查询结果按照指定字段进行降序排序。具体解释如下:

  • queryWrapper:这是一个 LambdaQueryWrapper<Article> 对象,用于构建查询条件和排序规则。
  • orderByDesc:这是 LambdaQueryWrapper 提供的方法之一,用于指定按照指定字段进行降序排序。
  • Article::getViewCounts:这是一个 Java 8 的方法引用,指定了排序的字段。Article 是实体类,getViewCounts 是该实体类中的一个方法或属性,通常表示文章的浏览量。

综上所述,这行代码的作用是对查询结果按照文章的浏览量字段进行降序排序。

public interface ArticleService {
    //首页最热文章
    Result hotArticle(int limit);
}
@Service
public class ArticleServiceImpl implements ArticleService {
    //之前代码已省略。。。
    @Override
    public Result hotArticle(int limit) {
        LambdaQueryWrapper<Article> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.orderByDesc(Article::getViewCounts);   //根据浏览量倒序
        queryWrapper.select(Article::getId,Article::getTitle);
        queryWrapper.last("limit " + limit);
        //上述三条语句等同于:select id,title from article order by view_counts desc limit 5
        List<Article> articles = articleMapper.selectList(queryWrapper);
        return Result.success(copyList(articles,false,false,false));
    }
}

2.4 测试

3. 首页-最新文章

3.1 接口说明

接口url:/articles/new

请求方式:POST

请求参数:

参数名称 参数类型 说明

返回数据:

{
    "success": true,
    "code": 200,
    "msg": "success",
    "data": [
        {
            "id": 1,
            "title": "springboot介绍以及入门案例",
        },
        {
            "id": 9,
            "title": "Vue.js 是什么",
        },
        {
            "id": 10,
            "title": "Element相关",
            
        }
    ]
}

3.1 Controller

ArticleController:

/*
    * 最新文章
    * */
    @PostMapping("new")
    public Result newArticles(){
        int limit = 5;
        return articleService.newArticles(limit);
    }

3.2 Service

public interface ArticleService {
    //最新文章
    Result newArticles(int limit);
}
@Service
public class ArticleServiceImpl implements ArticleService {
    //之前代码已省略。。。
    @Override
    public Result newArticles(int limit) {
        LambdaQueryWrapper<Article> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.orderByDesc(Article::getCreateDate);
        queryWrapper.select(Article::getId,Article::getTitle);
        queryWrapper.last("limit "+limit);
        //select id,title from article order by create_date desc limit 5
        List<Article> articles = articleMapper.selectList(queryWrapper);

        return Result.success(copyList(articles,false,false,false));
    }
} 

4. 首页-文章归档

4.1接口说明

接口url:/articles/listArchives

请求方式:POST

请求参数:

参数名称 参数类型 说明

返回数据:

{
    "success": true,
    "code": 200,
    "msg": "success",
    "data": [
        {
            "year": "2021",
            "month": "6",
            "count": 2
        }
            
    ]
}

4.1 Controller

ArticleController:

//json数据进行交互
@RestController
@RequestMapping("articles")
public class ArticleController {
    /*
    * 文章归档
    * */
    @PostMapping("listArchives")
    public Result listArchives(){
        return articleService.listArchives();
    }

}

4.2 Service

public interface ArticleService {   
    //文章归档
    Result listArchives();
}
@Service
public class ArticleServiceImpl implements ArticleService {
    @Override
    public Result listArchives() {
        List<Archives> archivesList = articleMapper.listArchives();
        return Result.success(archivesList);
    }
}

4.3 Dao

package com.cherriesovo.blog.dao.dos;

import lombok.Data;

// 档案类
@Data
public class Archives {

    private Integer year;
    
    private Integer month;
    
    private Integer count;	//文章数量

}
package com.cherriesovo.blog.dao.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cherriesovo.blog.dao.dos.Archives;
import com.cherriesovo.blog.dao.pojo.Article;

import java.util.List;
public interface ArticleMapper extends BaseMapper<Article> {
    List<Archives> listArchives();
}

<?xml version="1.0" encoding="UTF-8" ?>
<!--MyBatis配置文件-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.cherriesovo.blog.dao.mapper.ArticleMapper">

<!--List<Archives> listArchives();-->
    <select id="listArchives" resultType="com.cherriesovo.blog.dao.dos.Archives">
        select year(from_unixtime(create_date/1000)) as year,month(from_unixtime(create_date/1000)) as month,count(*) as count from ms_article group by year,month
    </select>
</mapper>
//使用FROM_UNIXTIME函数将时间戳转换为日期时间格式,并从中提取年份,然后使用YEAR函数提取年份部分。create_date/1000是为了将毫秒级时间戳转换为秒级时间戳,因为大多数数据库中的FROM_UNIXTIME函数接受的是秒级时间戳。
select year(from_unixtime(create_date/1000)) as year,month(from_unixtime(create_date/1000)) as month,count(*) as count from ms_article group by year,month

4.4 测试

标签:02,queryWrapper,LambdaQueryWrapper,笔记,博客,limit,Result,Article,public
From: https://www.cnblogs.com/zyj3955/p/18127279

相关文章

  • 个人博客项目笔记_03
    1.登录1.1接口说明接口url:/login请求方式:POST请求参数:参数名称参数类型说明accountstring账号passwordstring密码返回数据:{"success":true,"code":200,"msg":"success","data":"token"}......
  • 个人博客项目笔记_04
    1.注册1.1接口说明接口url:/register请求方式:POST请求参数:参数名称参数类型说明accountstring账号passwordstring密码nicknamestring昵称返回数据:{"success":true,"code":200,"msg":"success","data&qu......
  • 【专题】2024年中国游戏营销趋势报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=35745原文出处:拓端数据部落公众号2023年,全球游戏行业表现卓越,不仅用户规模扩大至33.81亿,行业营收也攀升至1.35万亿人民币,呈现出强劲的增长态势。然而,与此同时,全球游戏创业公司在风险投资上的大幅缩减也揭示了行业面临的某些挑战。阅读原文,获取专题......
  • 20212324
    第一部分第二部分?问题一问题二剩下......
  • 小美的数组构造(美团2024届秋招笔试第二场编程真题)
    题面核心思想dp[i][j]表示前i个数字和为j时的组合数那么第i个数的取法有1<=k<=j需要遍历第i个数取k前i-1个数取j-k时dp[i][j]=(dp[i][j]+dp[i-1][j-k])%MOD;注意是和为j第i个数取k所以是dp[i][j]。同时需要判断第i个数不能和a数组取相同的......
  • C语言学习笔记day18
    1.指针基本概念    1.地址:用来区分内存中不同字节的编号   2.指针:地址就是指针,指针就是地址   3.指针变量:存储指针的变量,有时去掉变量,称为指针2.指针运算符   1.&:      1.获得一个变量在内存空间中的首地址      2.让表达式类......
  • 002nestjs控制器(controller)
    一、控制器的作用控制器负责处理传入请求并向客户端返回响应二、使用方法新建/cats目录创建cats.controller.ts在里面添加如下内容import{Controller,Get}from'@nestjs/common';@Controller('cats')exportclassCatsController{@Get()findAll():string{......
  • Guitar Pro 8中文破解版 2024最新安装激活教程 Guitar Pro8无需许可证 Guitar Pro 8百
    GuitarPro8这款软件是吉他爱好者们的必备之选,它以其卓越的功能和优势,全面覆盖学习演奏和绘谱创作的需求,帮助吉他爱好者们更好地提升自己的技能。GuitarPro8中文破解版是一款专门针对吉他、五弦琴、以及贝斯爱好者打造而成的阅读器和编辑器软件,是系列软件的最新版本。这款软......
  • python爬虫—学习笔记-3
    python爬虫—学习笔记-3ps:因为本人近一个月住院,文章为队友所著。此次学习内容为如何搭建服务器1.打开pycharm,创建目录server在设置中的Python解释器中安装Flask2.在创建的server1中输入本节课所学代码在网页中输入ip端口号子目录本机访问127.0.0.1:5000/子目录外部......
  • 操作系统综合题之“采用二级页表的分页存储管理方式,计算页目录号的位数 和 页大小,给定
    一、问题:某计算机系统的主存按字节编址,逻辑地址和物理地址都是32位,其内存管理采用两级页表的分页存储管理方式。逻辑地址中页号位10位,页内偏移地址为10位。该计算机系统的两级页表结构如下图所示,图中数值均为十进制数1.页目录号的位数为多少?页的大小为多少KB?2.如果页目录项大小......