• GANG0211
    了解作者
  • Java
    开发工具
  • 55.6KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 5 积分
    下载积分
  • 0
    下载次数
  • 2022-05-24 14:24
    上传日期
博客资源代码,前后端vue分离技术,可当毕业设计
博客项目源码.zip
内容介绍
package com.mszlu.blog.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mszlu.blog.dao.dos.Archives; import com.mszlu.blog.dao.mapper.ArticleBodyMapper; import com.mszlu.blog.dao.mapper.ArticleMapper; import com.mszlu.blog.dao.mapper.ArticleTagMapper; import com.mszlu.blog.dao.pojo.Article; import com.mszlu.blog.dao.pojo.ArticleBody; import com.mszlu.blog.dao.pojo.ArticleTag; import com.mszlu.blog.dao.pojo.SysUser; import com.mszlu.blog.service.*; import com.mszlu.blog.utils.UserThreadLocal; import com.mszlu.blog.vo.ArticleBodyVo; import com.mszlu.blog.vo.ArticleVo; import com.mszlu.blog.vo.Result; import com.mszlu.blog.vo.TagVo; import com.mszlu.blog.vo.params.ArticleParam; import com.mszlu.blog.vo.params.PageParams; import org.apache.commons.lang3.StringUtils; import org.joda.time.DateTime; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class ArticleServiceImpl implements ArticleService { @Autowired private ArticleMapper articleMapper; @Autowired private TagService tagService; @Autowired private SysUserService sysUserService; @Autowired private ArticleTagMapper articleTagMapper; @Override public Result listArticle(PageParams pageParams) { Page<article rel='nofollow' onclick='return false;'> page = new Page<>(pageParams.getPage(),pageParams.getPageSize()); IPage<article rel='nofollow' onclick='return false;'> articleIPage = articleMapper.listArticle( page, pageParams.getCategoryId(), pageParams.getTagId(), pageParams.getYear(), pageParams.getMonth()); List<article rel='nofollow' onclick='return false;'> records = articleIPage.getRecords(); return Result.success(copyList(records,true,true)); } // @Override // public Result listArticle(PageParams pageParams) { // /** // * 1. 分页查询 article数据库表 // */ // Page<article rel='nofollow' onclick='return false;'> page = new Page<>(pageParams.getPage(),pageParams.getPageSize()); // LambdaQueryWrapper<article rel='nofollow' onclick='return false;'> queryWrapper = new LambdaQueryWrapper<>(); // if (pageParams.getCategoryId() != null){ // // and category_id=#{categoryId} // queryWrapper.eq(Article::getCategoryId,pageParams.getCategoryId()); // } // List<Long> articleIdList = new ArrayList<>(); // if (pageParams.getTagId() != null){ // //加入标签 条件查询 // //article表中 并没有tag字段 一篇文章 有多个标签 // //article_tag article_id 1 : n tag_id // LambdaQueryWrapper<articleTag rel='nofollow' onclick='return false;'> articleTagLambdaQueryWrapper = new LambdaQueryWrapper<>(); // articleTagLambdaQueryWrapper.eq(ArticleTag::getTagId,pageParams.getTagId()); // List<articleTag rel='nofollow' onclick='return false;'> articleTags = articleTagMapper.selectList(articleTagLambdaQueryWrapper); // for (ArticleTag articleTag : articleTags) { // articleIdList.add(articleTag.getArticleId()); // } // if (articleIdList.size() > 0){ // // and id in(1,2,3) // queryWrapper.in(Article::getId,articleIdList); // } // } // //是否置顶进行排序 // //order by create_date desc // queryWrapper.orderByDesc(Article::getWeight,Article::getCreateDate); // Page<article rel='nofollow' onclick='return false;'> articlePage = articleMapper.selectPage(page, queryWrapper); // List<article rel='nofollow' onclick='return false;'> records = articlePage.getRecords(); // //能直接返回吗? 很明显不能 // List<articleVo rel='nofollow' onclick='return false;'> articleVoList = copyList(records,true,true); // return Result.success(articleVoList); // } @Override public Result hotArticle(int limit) { LambdaQueryWrapper<article rel='nofollow' onclick='return false;'> 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 rel='nofollow' onclick='return false;'> articles = articleMapper.selectList(queryWrapper); return Result.success(copyList(articles,false,false)); } @Override public Result newArticles(int limit) { LambdaQueryWrapper<article rel='nofollow' onclick='return false;'> 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 desc limit 5 List<article rel='nofollow' onclick='return false;'> articles = articleMapper.selectList(queryWrapper); return Result.success(copyList(articles,false,false)); } @Override public Result listArchives() { List<archives rel='nofollow' onclick='return false;'> archivesList = articleMapper.listArchives(); return Result.success(archivesList); } @Autowired private ThreadService threadService; @Override public Result findArticleById(Long articleId) { /** * 1. 根据id查询 文章信息 * 2. 根据bodyId和categoryid 去做关联查询 */ Article article = this.articleMapper.selectById(articleId); ArticleVo articleVo = copy(article, true, true,true,true); //查看完文章了,新增阅读数,有没有问题呢? //查看完文章之后,本应该直接返回数据了,这时候做了一个更新操作,更新时加写锁,阻塞其他的读操作,性能就会比较低 // 更新 增加了此次接口的 耗时 如果一旦更新出问题,不能影响 查看文章的操作 //线程池 可以把更新操作 扔到线程池中去执行,和主线程就不相关了 threadService.updateArticleViewCount(articleMapper,article); return Result.success(articleVo); } @Override public Result publish(ArticleParam articleParam) { //此接口 要加入到登录拦截当中 SysUser sysUser = UserThreadLocal.get(); /** * 1. 发布文章 目的 构建Article对象 * 2. 作者id 当前的登录用户 * 3. 标签 要将标签加入到 关联列表当中 * 4. body 内容存储 article bodyId */ Article article = new Article(); article.setAuthorId(sysUser.getId()); article.setWeight(Article.Article_Common); article.setViewCounts(0); article.setTitle(articleParam.getTitle()); article.setSummary(articleParam.getSummary()); article.setCommentCounts(0); article.setCreateDate(System.currentTimeMillis()); article.setCategoryId(Long.parseLong(articleParam.getCategory().getId())); //插入之后 会生成一个文章id this.articleMapper.insert(article); //tag List<TagVo> tags = articleParam.getTags(); if (tags != null){ for (TagVo tag : tags) { Long articleId = article.getId(); ArticleTag articleTag = new ArticleTag(); articleTag.setTagId(Long.parseLong(tag.getId())); articleTag.setArticleId(articleId); articleTagMapper.insert(articleTag); } } //body ArticleBody articleBody = new ArticleBody(); articleBody.setArticleId(article.getId()); articleBody.setContent(articleParam.getBody().getContent()); articleBody.setContentHtml(articleParam.getBody().getContentHtml());
评论
    相关推荐
    • ssm的shiro权限认证demo
      本Demo是一个SSM框架,从开始搭建SSM框架开始到Shiro权限认证的完成,都是一步一个截图的操作。具体搭建文档信息已经发布到我的博客中,可以从我的博客中查看到!没有之一,只有唯一,绝对是史上最详细通过idea搭建...
    • springboot shiro 权限管理项目
      springboot shiro 权限管理项目,买不了吃亏,买不了上当
    • shiro权限控制
      Apache Shiro 是 Java 的一个安全框架。功能强大,使用简单的Java安全框架,它为开发人员提供一个直观而全面的认证,授权,加密及会话管理的解决方案。
    • shiro权限代码
      有自动数据生成的数据库,所以不用感到懵逼,里面有关于shiro的认证授权等相关代码,欢迎大家下载,有写不好的地方请指正,谢谢。
    • Shiro权限基础框架
      NULL 博文链接:https://lzj0470.iteye.com/blog/1934029
    • java shiro权限认证demo
      java shiro权限认证demo
    • shiro 权限 ssm
      关于权限登录的例子,在公司做登录权限时,我先做一个例子试试,用MySQL,maven,springMVC,spring
    • Shiro权限基础框架
      NULL 博文链接:https://lzj0470.iteye.com/blog/1934029
    • Springboot+shiro权限管理
      Springboot+shiro权限管理。这或许是流程最详细、代码最干净、配置最简单的shiro上手项目
    • shiro权限框架Demo
      在一次项目中,用到了apache的shiro权限框架。然后自己写了一个Demo,如果有需要的都可以自己下载,有什么不懂的地方可以加我QQ:9885465。给你详细的解答