一个博客项目-3分类管理

2024-02-07 00:18
文章标签 项目 博客 分类管理

本文主要是介绍一个博客项目-3分类管理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 分类管理页面
  • 分类列表分页
  • 分类新增、修改、删除

  • 分类管理页面

    • types.html可以在blogs基础上进行修改
    • types-input.html可以再blogs-input基础上进行修改
  • 分类列表分页
    首先要做dao层和service层

TypeRepository.java

package com.lmr.blog.dao;import com.lmr.blog.po.Type;
import org.springframework.data.jpa.repository.JpaRepository;public interface TypeRepository extends JpaRepository<Type, Long> {Type findByName(String name);
}

TypeService.java

package com.lmr.blog.service;import com.lmr.blog.po.Type;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;/*** Created by limi on 2017/10/16.*/
public interface TypeService {Type saveType(Type type);Type getType(Long id);Type getTypeByName(String name);Page<Type> listType(Pageable pageable);Type updateType(Long id,Type type);void deleteType(Long id);
}
  • pageable是Spring Data库中定义的一个接口,用于构造翻页查询,是所有相关分页信息的一个抽象,通过该接口,我们可以得到和分页相关所有信息(例如pageNumber、pageSize等),这样,Jpa就能通过pageable参数来得到一个带分页信息的SQL语句。
    pageable参考

TypeServiceImpl.java

package com.lmr.blog.service;import com.lmr.blog.NotFoundException;
import com.lmr.blog.dao.TypeRepository;
import com.lmr.blog.po.Type;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;/*** Created by limi on 2017/10/16.*/
@Service
public class TypeServiceImpl implements TypeService {@Autowired //先进行注入private TypeRepository typeRepository;@Transactional  //增删改查都放在一个事务中@Overridepublic Type saveType(Type type) {return typeRepository.save(type);}@Transactional@Overridepublic Type getType(Long id) {//  Spring boot新版本中findByid,旧版本是findOne(id)return typeRepository.findById(id).orElse(null);}@Overridepublic Type getTypeByName(String name) {return typeRepository.findByName(name);}@Transactional@Overridepublic Page<Type> listType(Pageable pageable) {return typeRepository.findAll(pageable);}@Transactional@Overridepublic Type updateType(Long id, Type type) {Type t = typeRepository.findById(id).orElse(null);if (t == null) {throw new NotFoundException("不存在该类型");}BeanUtils.copyProperties(type,t);return typeRepository.save(t);}@Transactional@Overridepublic void deleteType(Long id) {typeRepository.deleteById(id);}
}

TypeController.java

package com.lmr.blog.web.admin;import com.lmr.blog.po.Type;
import com.lmr.blog.service.TypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.web.PageableDefault;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;/*** Created by limi on 2017/10/16.*/@Controller
@RequestMapping("/admin")
public class TypeController {@Autowiredprivate TypeService typeService;@GetMapping("/types")public String types(@PageableDefault(size = 3,sort = {"id"},direction = Sort.Direction.DESC)Pageable pageable, Model model) {model.addAttribute("page",typeService.listType(pageable));return "admin/types";}@GetMapping("/types/input")public String input(Model model) {model.addAttribute("type", new Type());return "admin/types-input";}@GetMapping("/types/{id}/input")public String editInput(@PathVariable Long id, Model model) {model.addAttribute("type", typeService.getType(id));return "admin/types-input";}@PostMapping("/types")public String post(@Validated Type type,BindingResult result, RedirectAttributes attributes) {Type type1 = typeService.getTypeByName(type.getName());//  使用了后端校验,"name"必须与后端一致if (type1 != null) {result.rejectValue("name","nameError","不能添加重复的分类");}if (result.hasErrors()) {return "admin/types-input";}Type t = typeService.saveType(type);if (t == null ) {attributes.addFlashAttribute("message", "新增失败");} else {attributes.addFlashAttribute("message", "新增成功");}return "redirect:/admin/types";}@PostMapping("/types/{id}")public String editPost(@Validated Type type, BindingResult result, @PathVariable Long id, RedirectAttributes attributes) {Type type1 = typeService.getTypeByName(type.getName());if (type1 != null) {result.rejectValue("name","nameError","不能添加重复的分类");}if (result.hasErrors()) {return "admin/types-input";}Type t = typeService.updateType(id,type);if (t == null ) {attributes.addFlashAttribute("message", "更新失败");} else {attributes.addFlashAttribute("message", "更新成功");}return "redirect:/admin/types";}@GetMapping("/types/{id}/delete")public String delete(@PathVariable Long id,RedirectAttributes attributes) {typeService.deleteType(id);attributes.addFlashAttribute("message", "删除成功");return "redirect:/admin/types";}}

这篇关于一个博客项目-3分类管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/685973

相关文章

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Spring Boot项目如何使用外部application.yml配置文件启动JAR包

《SpringBoot项目如何使用外部application.yml配置文件启动JAR包》文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括... 目录Spring Boot项目中使用外部application.yml配置文件启动JAR包一、基本原理

Springboot项目登录校验功能实现

《Springboot项目登录校验功能实现》本文介绍了Web登录校验的重要性,对比了Cookie、Session和JWT三种会话技术,分析其优缺点,并讲解了过滤器与拦截器的统一拦截方案,推荐使用JWT... 目录引言一、登录校验的基本概念二、HTTP协议的无状态性三、会话跟android踪技术1. Cook

springboot项目中集成shiro+jwt完整实例代码

《springboot项目中集成shiro+jwt完整实例代码》本文详细介绍如何在项目中集成Shiro和JWT,实现用户登录校验、token携带及接口权限管理,涉及自定义Realm、ModularRe... 目录简介目的需要的jar集成过程1.配置shiro2.创建自定义Realm2.1 LoginReal

idea Maven Springboot多模块项目打包时90%的问题及解决方案

《ideaMavenSpringboot多模块项目打包时90%的问题及解决方案》:本文主要介绍ideaMavenSpringboot多模块项目打包时90%的问题及解决方案,具有很好的参考价值,... 目录1. 前言2. 问题3. 解决办法4. jar 包冲突总结1. 前言之所以写这篇文章是因为在使用Mav

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编