首页 > 其他分享 >【Spring Boot】基于 JPA 开发的文章管理系统(CRUD)

【Spring Boot】基于 JPA 开发的文章管理系统(CRUD)

时间:2024-07-07 19:27:02浏览次数:20  
标签:mav JPA Spring CRUD id ModelAndView import article public

JPA 从入门到精通》系列包含以下文章:


基于 JPA 开发的文章管理系统(CRUD)

1.实现文章实体

新建 Spring Boot 项目,然后在项目的业务代码入口下(入口类同级目录下)新建 entityrepositoryservicecontroller 文件夹,并在 service 文件夹中新建 impl 文件夹。

在这里插入图片描述

用鼠标右键单击 entity 文件夹,新建 Article 类。

package com.example.demo.entity;

import lombok.Data;

import javax.persistence.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;

@Entity
@Data
public class Article extends BaseEntity implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(nullable = false, unique = true)
    @NotEmpty(message = "标题不能为空")
    private String title;

    @Column(nullable = false)
    private String body;

}
  • @Entity:声明它是个实体,然后加入了注解 @Data,@Data 是 Lombok 插件提供的注解,以简化代码,自动生成 Getter、Setter 方法。文章的属性字段一般包含 idtitlekeywordbody,以及发布时间、更新时间、处理人。这里只简化设置文章 id、关键词、标题和内容。
  • @GeneratedValue:将 id 作为主键。GenerationType 为 identity,代表由数据库统一控制 id 的自增。如果属性为 auto,则是 Spring Boot 控制 id 的自增。使用 identity 的好处是,通过数据库来管理表的主键的自增,不会影响到其他表。
  • nullable = false, unique = true:建立唯一索引,避免重复。
  • @NotEmpty(message ="标题不能为空"):作为提示和验证消息。

2.实现数据持久层

鼠标右键单击 repository 文件夹,然后新建接口。在 Kind 类型处选择接口 interface,将名字设为 ArticleRepository。完成后的代码如下:

package com.example.demo.repository;

import com.example.demo.entity.Article;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

public interface ArticleRepository extends JpaRepository<Article, Long>, JpaSpecificationExecutor<Article> {
    Article findById(long id);
}

这里继承 JpaRepository 来实现对数据库的接口操作。

3.实现服务接口和服务接口的实现类

通过创建服务接口和服务接口的实现类来完成业务逻辑功能。

3.1 创建服务接口

package com.example.demo.service;

import com.example.demo.entity.Article;
import java.util.List;

public interface ArticleService {
    public List<Article> getArticleList();
    public Article findArticleById(long id);
}

3.2 编写服务接口的实现

impl 包下,新建 articleimpl 实现 Service,并标注这个类为 Service 服务类。

通过 implements 声明使用 ArticleService 接口,并重写其方法,见以下代码:

package com.example.demo.service.impl;

import com.example.demo.entity.Article;
import com.example.demo.repository.ArticleRepository;
import com.example.demo.service.ArticleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * Description: 标注为服务类
 */
@Service
public class ArticleServiceImpl implements ArticleService {
    @Autowired
    private ArticleRepository articleRepository;

    /**
     * Description: 重写service接口的实现,实现列表功能
     */
    @Override
    public List<Article> getArticleList() {
        return articleRepository.findAll();
    }

    /**
     * Description: 重写service接口的实现,实现根据id查询对象功能。
     */
    @Override
    public Article findArticleById(long id) {
        return articleRepository.findById(id);
    }
}

4.实现增、删、改、查的控制层 API 功能

接下来,实现增加、删除、修改和查询的控制层 API 功能。

package com.example.demo.controller;

import com.example.demo.entity.Article;
import com.example.demo.repository.ArticleRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;

@Controller
@RequestMapping("article")
public class ArticleController {
    @Autowired
    private ArticleRepository articleRepository;

    /**
     * Description: 文章列表
     */
    @RequestMapping("")
    public ModelAndView articlelist(@RequestParam(value = "start", defaultValue = "0") Integer start,
                                    @RequestParam(value = "limit", defaultValue = "5") Integer limit) {
        start = start < 0 ? 0 : start;
        Sort sort = Sort.by(Sort.Direction.DESC, "id");
        Pageable pageable = PageRequest.of(start, limit, sort);
        Page<Article> page = articleRepository.findAll(pageable);
        ModelAndView mav = new ModelAndView("article/list");
        mav.addObject("page", page);
        return mav;
    }

    /**
     * Description: 根据id获取文章对象
     */
    @GetMapping("/{id}")
    public ModelAndView getArticle(@PathVariable("id") Integer id) throws Exception {
        Article articles = articleRepository.findById(id);
        ModelAndView mav = new ModelAndView("article/show");
        mav.addObject("article", articles);
        return mav;
    }

    /**
     * Description: 新增操作视图
     */
    @GetMapping("/add")
    public String addArticle() throws Exception {
        return "article/add";
    }

    /**
     * Description: 新增保存方法
     */
    @PostMapping("")
    public String saveArticle(Article model) throws Exception {
        articleRepository.save(model);
        return "redirect:/article/";
    }

    /**
     * Description: 删除
     */
    @DeleteMapping("/{id}")
    public String del(@PathVariable("id") long id) throws Exception {
        articleRepository.deleteById(id);
        return "redirect:";
    }

    /**
     * Description: 编辑视图
     */
    @GetMapping("/edit/{id}")
    public ModelAndView editArticle(@PathVariable("id") long id) throws Exception {
        Article model = articleRepository.findById(id);
        ModelAndView mav = new ModelAndView("article/edit");
        mav.addObject("article", model);
        return mav;
    }

    /**
     * Description: 修改方法
     */
    @PutMapping("/{id}")
    public String editArticleSave(Article model, long id) throws Exception {
        model.setId(id);
        articleRepository.save(model);
        return "redirect:";
    }

}
  • @Autowired:即自动装配。Spring 会自动将标记为 @Autowired 的元素装配好。这个注解可以用到构造器、变量域、方法、注解类型上,该注解用于自动装配。视图从 Bean 工厂中获取一个 Bean 时,Spring 会自动装配该 Bean 中标记为 @Autowired 的元素,而无须手动完成。
  • @RequestMapping("/article") :用户访问网页的 URL。这个注解不限于 GET 方法。
  • ModelAndView:分为 Model 和 View。Model 负责从后台处理参数。View 就是视图,用于指定视图渲染的模板。
  • ModelAndView mav = new ModelAndView("article/list"):指定视图和视图路径。
  • mav.addObject("page", page):指定传递 page 参数。

4.1 获取文章列表

/**
 * Description: 文章列表
 */
@RequestMapping("")
public ModelAndView articlelist(@RequestParam(value = "start", defaultValue = "0") Integer start,
                                @RequestParam(value = "limit", defaultValue = "5") Integer limit) {
    start = start < 0 ? 0 : start;
    Sort sort = Sort.by(Sort.Direction.DESC, "id");
    Pageable pageable = PageRequest.of(start, limit, sort);
    Page<Article> page = articleRepository.findAll(pageable);
    ModelAndView mav = new ModelAndView("article/list");
    mav.addObject("page", page);
	return mav;
}

在这里插入图片描述

4.2 根据 id 获取文章对象

/**
 * Description: 根据id获取文章对象
 */
@GetMapping("/{id}")
public ModelAndView getArticle(@PathVariable("id") Integer id) throws Exception {
    Article articles = articleRepository.findById(id);
    ModelAndView mav = new ModelAndView("article/show");
    mav.addObject("article", articles);
	return mav;
}

在这里插入图片描述

4.3 新增

/**
 * Description: 新增操作视图
 */
@GetMapping("/add")
public String addArticle() throws Exception {
	return "article/add";
}

在这里插入图片描述

4.4 保存

/**
 * Description: 新增保存方法
 */
@PostMapping("")
public String saveArticle(Article model) throws Exception {
    articleRepository.save(model);
	return "redirect:/article/";
}

在这里插入图片描述
在这里插入图片描述

4.5 删除

/**
 * Description: 删除
 */
@DeleteMapping("/{id}")
public String del(@PathVariable("id") long id) throws Exception {
    articleRepository.deleteById(id);
	return "redirect:";
}

在这里插入图片描述

4.6 编辑

/**
 * Description: 编辑视图
 */
@GetMapping("/edit/{id}")
public ModelAndView editArticle(@PathVariable("id") long id) throws Exception {
    Article model = articleRepository.findById(id);
    ModelAndView mav = new ModelAndView("article/edit");
    mav.addObject("article", model);
	return mav;
}

在这里插入图片描述

4.7 修改

/**
 * Description: 修改方法
 */
@PutMapping("/{id}")
public String editArticleSave(Article model, long id) throws Exception {
    model.setId(id);
    articleRepository.save(model);
    return "redirect:";
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.实现增、删、改、查功能的视图层

  • 实现文章增加视图
  • 实现文章显示视图
  • 实现文章删除视图
  • 编辑视图
  • 实现分页视图

具体实现的前端代码不在此处展开。

在这里插入图片描述

标签:mav,JPA,Spring,CRUD,id,ModelAndView,import,article,public
From: https://blog.csdn.net/be_racle/article/details/140108955

相关文章

  • 【spring】(极简版)
    spring的核心就是控制反转和依赖注入,说人话就是把对象交给spring容器管理搭建一个spring非常简单项目结构(简单吧)第一步,创建一个空的Maven项目并在pom.xml中导入依赖(其实spring的依赖只用spring-context就可以了,不过我习惯用单元测试,所有导了个junit的包,如果不导junit,用mai......
  • 【Spring Boot】关系映射开发(三):多对多映射
    关系映射开发(三):多对多映射1.创建实体1.1创建Student实体1.2创建Teacher实体2.创建测试在多对多关联关系中,只能通过中间表的方式进行映射,不能通过增加外键来实现。注解@ManyToMany用于关系的发出端和接收端。关系的发出端定义一个集合类型的接......
  • SpringBoot-校园疫情防控系统-93033(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP
    springboot校园疫情防控系统摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对校园疫情防控等问题,对校园疫情防控进行研究分析,然后开发设计出......
  • Spring框架:核心概念与Spring Boot微服务开发指南
    引言        Spring框架是一个开源的Java平台,它提供了全面的基础设施支持,用于开发Java应用程序。Spring的核心概念包括依赖注入(DI)、面向切面编程(AOP)和事务管理。随着微服务架构的兴起,SpringBoot作为Spring框架的扩展,提供了一种快速开发独立微服务的方式。本文将详细......
  • Spring 配置文件加密
    前文在某些场景下,使用Spring作为开发组件时,不可避免地需要使用到配置文件,然而,对于配置文件中的某些敏感数据(如密码等信息字段),如果使用明文的方式,则可能在一定程度上导致信息泄露。为此,需要一种有效的方式来对这些字段进行加密处理,当前主流的一种加密方式就是Jasypt基本使用......
  • Spring之 IoC、BeanFactory、ApplicationContext
    IoC(InverseofControl)IoC,也就是控制反转。对于软件来说,即某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定,即由Spring容器借由Bean配置来进行控制。MartinFowler提出了DI(DependencyInjection,依赖注入)的概念用来代替IoC,即让调用类对某一接口实现类的......
  • spring-14-Spring 提供集合的配置元素
    <list>类型用于注入一列值,允许有相同的值。   对于Spring框架来说,<list>类型是一种用于注入一列值的配置元素。它允许您在Spring应用程序上下文中创建一个列表,并将它注入到一个bean的属性中。这个列表可以包含任意数量的对象,并允许出现相同的值。下面是一个完整的示例......
  • 【Spring Boot】统一数据返回,直接使用
    个人名片......
  • Springboot2使用Knife4j快速配置
    jdk版本8/111.导入依赖<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>${knife4j.version}</version></dependency>这里我的版本是3.0.32.创建配置类......
  • 【计算机毕业设计】springboot基于Android的大学生勤工助学管理系统设计与实现
    大学生勤工助学管理系统设计的目的是为用户提供企业招聘、已投简历等方面的平台。与PC端应用程序相比,大学生勤工助学管理系统的设计主要面向于大学生勤工助学,旨在为管理员和学生、企业提供一个Android的大学生勤工助学管理系统。学生可以通过Android及时查看企业招聘等。......