springboot+JPA- - - -项目基本结构(包含ResultVOUtil自定义错误信息)

2023-05-16

springboot项目的整体结构

 

1  entity

package com.lz.palmscore.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Activity {

  @Id
  @GeneratedValue(strategy= GenerationType.IDENTITY)
  private Integer id;
  private String name;//活动名
  private String startTime;//开始日期
    ·
    ·
    ·
}

2  form

为了获取表单数据转换为对象的形式,同时注解的进行限制。比如不能为空···

package com.lz.palmscore.form;
import org.springframework.beans.factory.annotation.Value;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

public class ActivityForm {

    @NotEmpty(message = "活动名必填")
    private String name;//活动名

    @NotNull(message = "参赛组数必填")
    private Integer groupNum;

        ···

 }

3 enums(自定义异常处理)

  枚举类型 定义错误信息, 因为枚举允许用类型化的值替换常量并在任何地方使用这些类型。

使用时通过   ActivityEnum.ACTIVITY_ERROR.getCode()/.getMessage() 可获取错误码或者错误信息

(具体可参考下面controller里面的代码)

package com.lz.palmscore.enums;

public enum ActivityEnum {

    PASSWORD_NULL(205,"评委打分密码必填"),

        ````
     ;

    private Integer code;
    private String message;

    ActivityEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

4  exception(自定义异常处理)

定义activity的异常类,继承RuntimeException'

通常使用方法为:throw new AcitvityException(ActivityEnum.ACTIVITY_ERROR);

(具体可参考下面controller里面的代码)

package com.lz.palmscore.exception;

import com.lz.palmscore.enums.ActivityEnum;

public class AcitvityException extends RuntimeException{

    private Integer code;

    public Integer getCode() {
        return code;
    }
//调用定义的ActivityEnum 中的错误信息

    public AcitvityException(ActivityEnum activityEnum) {
        super(activityEnum.getMessage());
        this.code =activityEnum.getCode();
    }
//自定义code,以及错误信息
    public AcitvityException(Integer code,String msg){
        super(msg);
        this.code = code;
    }
}

5 util----ResultVOUtil(自定义异常返回值)


return ResultVOUtil.success();
return ResultVOUtil.success(activityList);
return ResultVOUtil.error(222,"删除失败");
  

(具体可参考下面controller里面的代码)

package com.lz.palmscore.util;

import com.lz.palmscore.vo.ResultVO;

public class ResultVOUtil {
    //成功,有返回值
    public static ResultVO success(Object object){
        ResultVO resultVO = new ResultVO();
        resultVO.setCode(0);
        resultVO.setMsg("成功");
        resultVO.setData(object);
        return resultVO;
    }
    //成功 没有返回值
    public static ResultVO success(){
        return success(null);
    }
    //错误
    public static ResultVO error(Integer code,String msg){
        ResultVO resultVO = new ResultVO();
        resultVO.setCode(code);
        resultVO.setMsg(msg);
        return resultVO;
    }
}

6.repository

Repository居于业务层和数据层之间,将两者隔离开来,在它的内部封装了数据查询和存储的逻辑。

这样设计的好处有两个:

    降低层级之间的耦合:更换、升级ORM引擎(Hibernate)并不会影响业务逻辑
    提高测试效率:如果在测试时能用Mock数据对象代替实际的数据库操作,运行速度会快很多

package com.lz.palmscore.repository;

import com.lz.palmscore.entity.Activity;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ActivityRepository extends JpaRepository<Activity,Integer> {

}

7 service

   具体的业务处理

package com.lz.palmscore.service;


import com.lz.palmscore.entity.Activity;
import com.lz.palmscore.entity.Player;
import com.lz.palmscore.entity.Rater;
import com.lz.palmscore.entity.ScoreItem;


public interface ActivityService{
    Activity add(Activity ac);
    List<Activity> findAll();
    boolean alldelete(Integer id);
}

8 serviceImpl  (实现层)

package com.lz.palmscore.service.impl;

import com.lz.palmscore.entity.*;
import com.lz.palmscore.repository.*;
import com.lz.palmscore.service.ActivityService;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.util.*;

@Service
public class ActivityServiceImpl implements ActivityService {

    @Autowired
    private ActivityRepository activityRepository;

     /**
     * 添加activity
     * @return
     */
    @Override
    public Activity add(Activity ac) {
        Activity activity=activityRepository.save(ac);
        return activity;
    }


    /**
     * 查询所有activity
     * @return
     */
    @Override
    public List<Activity> findAll() {
        return activityRepository.findAll();
    }
}

9 controller(嘎嘎嘎终于出现了~)

     是控制器,所以它是负责业务调度的,所以在这一层应写一些业务的调度代码,

方法定义成ResultVO类型····  慢慢看代码··不想说了··

有用到之前定义的form表单,

通过@vaild注入,通知需要注入BindingResult结合验证·········

package com.lz.palmscore.controller;

import com.lz.palmscore.Conventer.ActivityForm2ActivityConventer;
        
            ···
    
@RestController
@RequestMapping("/admin")
@Slf4j
public class ActivityController  {

    @Autowired
    ActivityService activityService;

    @Autowired
    PeopleService peopleService;

    /**
     * 活动添加 仅添加
     */

    @PostMapping("activity_add")
    public ResultVO ActivityAdd(@Valid ActivityForm activityForm,
                                BindingResult bindingResult,
                                HttpSession session){
        if (bindingResult.hasErrors()) {
            log.error("[添加活动]格式错误");
            return ResultVOUtil.error(ActivityEnum.ACTIVITY_ERROR.getCode(),bindingResult.getFieldError().getDefaultMessage());
        }
        Activity activity = ActivityForm2ActivityConventer.conventer(activityForm);

        if (activity == null) {
            log.error("[活动]创建失败");
            throw new AcitvityException(ActivityEnum.ACTIVITY_ERROR);
        }
        Integer id= (Integer) session.getAttribute("activityId");
        activity.setId(id);
        session.setAttribute("activity",activity);
        return ResultVOUtil.success();
    }
   
    /**
     * 显示所有活动
     * @return
     */

    @GetMapping("activity_show")
    public ResultVO show() {
        List<Activity> activityList = activityService.findAll();

        return ResultVOUtil.success(activityList);
    } 
   
    }
}

 

 

~~~~~~~~~~

然后页面信息放到:

 

 

 

 

 

 


 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot+JPA- - - -项目基本结构(包含ResultVOUtil自定义错误信息) 的相关文章

  • 23. 合并K个升序链表

    class Solution public ListNode mergeKLists ListNode lists if lists 61 61 null lists length 61 61 0 return null for int i
  • 146. LRU 缓存机制

    class LRUCache class Node public int key public int value public Node prev public Node next public Node public Node int
  • Python经典书籍有哪些?这份书单送给你_黑马程序员

    文章目录 一 Python 基础 01 Python编程 xff1a 从入门到实践 xff08 第2版 xff09 02 Python编程快速上手 xff08 第2版 xff09 03 Python编程初学者指南 04 笨方法 学Pytho
  • 一种 XML2XML 格式之间转换的解决方案(转)

    一种 XML2XML 格式之间转换的解决方案 本文提供了一种 XML2XML 格式之间转换的通用解决方案 我们通过建立用以存储数据信息的数据模型 xff0c 并应用优化器 Optimizers xff0c 转换规则 Rules 对所存储的信
  • 奇异矩阵的解释

    奇异矩阵是线性代数的概念 xff0c 就是该矩阵的秩不是满秩 1 首先 xff0c 看这个矩阵是不是方阵 2 再看此矩阵的行列式 A 是否等于0 xff0c 若等于0 xff0c 称矩阵A为奇异矩阵 3 若不等于0 xff0c 称矩阵A为非
  • 用MATLAB编程求出三位数中全部的水仙花数

    代码 xff1a m 61 100 999 m1 61 rem m 10 求个位数 m2 61 rem fix m 10 10 求十位数 m3 61 fix m 100 求百位数 k 61 find m 61 61 m1 3 43 m2 3
  • MATLAB中的字符串处理

    字符串的处理 在MATLAB中 xff0c 字符串 是用单引号 括起来的字符序列若字符串中的字符含有单引号 xff0c 则该单引号字符 要用两个单引号 来表示在MATLAB中 xff0c 下标索引都是从1开始 案例 xff1a 建立一个字符
  • c语言案例——输入一个字符串,将其逆序输出

    字符串常量可以赋值给一个字符指针 或者一个字符数组 xff0c 比如 xff1a 1 char str 61 this is a string 2 char str2 61 this is a string 3 char str3 100
  • 计算机组成原理——总线控制(总线判优控制、总线通信控制)

    总线控制 一 总线判优控制 1 基本概念 xff1a 总线判优控制 的集中式 方式有三种 xff1a 链式查询 计数器定时查询 独立请求方式 1 链式查询方式 注 xff1a 在查询链中离总线控制器最近的部件具有最高优先权 xff0c 离总
  • os练习题2

    对存放在单一存储设备 如磁带 上的顺序文件连续存取速度快 顺序文件存放在多路存储设备 如磁盘 上时 xff0c 在多道程序的情况下 xff0c 由于别的用户可能驱使磁头移向其它柱面 xff0c 会降低连续存取的速度 顺序文件多用于磁带 从内
  • 编程的基础知识

    c的发展历史 void 类型 程序的入口成了 tmain xff0c 这个和 VC6 0 中的 main 函数类似 xff0c 在前面加个 t xff0c 是为了对 unicode 项目的设置兼容 xff0c 但它们都是程序执行的入口 xf
  • Idea拉取Git上项目的新分支以及在Idea上新建分支提交到Git

    一 Idea拉取Git上项目的新分支 背景说明 xff1a 在Git仓库手动创建了一个新的分支 xff0c 本地Idea想要拉取新建的分支到本地 xff0c 但是Idea分支管理里找不到所建分支 xff0c 所以无法拉取新分支到本地 处理方
  • 如何将eclipse窗口还原

    在我们编程过程中 xff0c 会有各种原因将eclipse窗口摆乱 xff0c 为了方便起见 xff0c 我们可以将窗口还原 xff0c 还原窗口方法如下 xff1a 1 在工具栏依次找到WIndow gt Perspective gt R
  • 图的遍历(python实现)

    深度优先遍历 深度优先遍历 深度优先遍历顾名思义就是一条路走到黑 xff0c 如图所示 xff0c 从0开始遍历 xff0c 遍历他的邻边1 xff0c 当遍历1时 xff0c 发现他的邻边0已经遍历了 xff0c 所以这条路已经走到头了
  • 目前排名前十的编程语言各自的特点和主要应用领域

    一 Python 特点 xff1a 1 简单 xff1a Python是一种代表简单思想的语言 2 易学 xff1a Python有极其简单的语法 3 免费 开源 Python是FLOSS xff08 自由 开放源码软件 xff09 之一
  • mariadb yum 安装之后修改字符集

    1 yum 安装mariadb之后 xff0c 默认不是utf8 的字符集 xff0c 建议在安装完成之后 xff0c 修改成utf8 对已经建立的数据库 xff0c 修改是无效的 xff0c 需要通过其他途径 mariadb 10 2 安
  • Linux(Ubuntu18.04)安装Chrome浏览器

    一 下载deb软件安装包 https dl google com linux deb pool main g google chrome stable google chrome stable 98 0 4758 102 1 amd64 d
  • 配置yum源遇到的问题

    yun配置文件 ambari name 61 local iso baseurl 61 file home redhat iso 填写挂载镜像的位置 enable 61 1 gpgcheck 61 1 gpg签名校验 默认关闭 gpgkey
  • 【Android安全】Android settings命令

    Android 中有一个可执行文件settings xff0c 可以使得调试变得方便 settings用法 xff1a device span class token operator span name span class token
  • PyCharm,Terminal 常用快捷键

    转自 xff1a https blog csdn net sinat 41668302 article details 106211007 PyCharm xff0c Terminal 常用快捷键 enter Terminal 快捷键 功能

随机推荐

  • 1175 最大半连通子图(强连通分量)

    1 问题描述 xff1a 一个有向图 G 61 V xff0c E 称为半连通的 Semi Connected xff0c 如果满足 xff1a u xff0c v V xff0c 满足 u v 或 v u xff0c 即对于图中任意两点
  • 呆呆和你谈谈入职CVTE一个月的感受

    呆呆和你谈谈入职CVTE一个月的感受 你盼世界 xff0c 我盼望你无bug Hello 大家好 xff01 我是霖呆呆 xff01 啊啊啊啊啊 至6 18日入职新公司CVTE已经一个多月了 xff0c 在 你盼世界 xff0c 我盼望你无
  • fastboot刷boot命令

    fastboot flash boot b rooted boot路径 fastboot flash boot a rooted boot路径
  • 剑指 Offer 03. 数组中重复的数字--详解

    找出数组中重复的数字 在一个长度为 n 的数组 nums 里的所有数字都在 0 xff5e n 1 的范围内 数组中某些数字是重复的 xff0c 但不知道有几个数字重复了 xff0c 也不知道每个数字重复了几次 请找出数组中任意一个重复的数
  • 虚拟机和win主机不能互相ping通,不能ping通外网,全方位解析

    1 确认虚拟机处于桥接状态 xff1a xff08 虚拟机 gt 设置 gt 网络适配器 xff09 2 桥接是虚拟机的虚拟网卡与主机的网卡通过虚拟网桥进行连接 xff0c 因此 主机 虚拟机的子网掩码 网关 dns必须保持一直 ubunt
  • Android Cordova 正常安卓项目封装成插件的流程记录

    Android Cordova 正常安卓项目封装成插件的流程记录 背景 xff1a 混合式开发cordova使用Android原生插件 封装流程 xff1a 1 gradle的封装 xff1a a xff1a 需要在插件中先创建一个 gra
  • Ubuntu18.04配置ssh服务以实现远程连接

    1 连接环境 虚拟机 xff1a Ubuntu18 04 连接工具 xff1a SecureCRT 2 配置虚拟机的SSH服务 sudo apt get update sudo apt get install openssh client
  • RxJava2(五)线程调度器Scheduler

    线程调度器Scheduler RxJava是一个为异步编程而实现的库 xff0c 但异步也存在线程安全问题 xff0c 比如 xff0c 那些操作需要在前台线程 xff0c 那些操作又需要在后台线程等等 而Scheduler就是这样一个线程
  • 按键消抖的三种方案

    首先 xff0c 做两个假定 xff0c 以方便后面的描述 xff1a 假定按键的默认状态为0 xff0c 被按下后为1假定按键抖动时长小于20ms xff0c 也即使用20ms的消抖时间 方案1 xff1a 在按键电平稳定的情况下 xff
  • D1_1-10的阶乘求和:1!+2!+3!+......+9!+10!

    首先我们要清楚10 xff01 是什么 阶乘 xff0c 符号为n 是指从1开始依次相乘直到n eg xff1a 10 xff01 61 1 2 3 4 5 6 7 8 9 10 话不多说 xff0c 先放代码为敬 xff1a span c
  • ASK、FSK、PSK信号及其频谱

    代码 xff1a https github com LHesperus signal processing tree master Modulated 20signal 2ASK信号及其频谱 4ASK信号及其频谱 FSK信号及其频谱 4FS
  • 2022-9-20----Android----User版 打开串口抓开机日志

    分析设备无法开机或开机出现异常 xff0c 得用串口抓取开机log xff0c 但是user版默认是关闭串口的 xff0c 所以你得去 lk 把串口打开 Android 5 6的修改方法 xff1a diff span class toke
  • C# RabbitMQ(一)介绍

    什么是消息队列 顾名思义 xff0c 这是一个消息按顺序排列的集合 xff0c 遵循的是先进先出原则 xff0c 队列中存放的是Message 消息队列中间件是分布式系统中重要的组件 xff0c 主要解决应用耦合 异步消息 流量削锋等问题
  • IDEI打开主动引入功能,并排除一些包的自动引入

    欧尅了
  • dubbo

    dubbo通过官网学习 http dubbo apache org en us 一 陌生的名词解释 xff1a SPI xff1a service provider interface 服务提供机制 Hessian 是一个轻量级的RPC框架
  • 2020-09-04

    构造器 private SystemStatus try this sysStatus 61 0 transManager 61 new TransactionManager try DBTableSQL dbTable 61 new DB
  • 人脸匹配(face matching)

    以下是人脸匹配 xff08 face matching xff09 的实验报告 xff0c 实验中采用ldlib xff0c facenet xff0c arcface三种算法 xff0c 简单对比了三种算法的效果 xff0c 源代码见文章
  • 登录功能逻辑分析及部分代码实现

    1 代码书写顺序 xff1a login jsp LoginServlet LoginService LoginDao login jsp 2 loginservlet 1首先获取页面传的值 username password 2 调用us
  • mysql中可以查询英文却查不了中文或数字

    啊啊啊啊真的是阔怕 想用js 43 ajax写一个智能搜索 遇到了很多问题哦 不过这次让我很熟练的用debug了 哈哈哈哈开心 刚开始连接数据库一直没有返回值觉得好奇怪 xff01 后来大神就说是因为数据库和Java文件编码格式不一样 我试
  • springboot+JPA- - - -项目基本结构(包含ResultVOUtil自定义错误信息)

    springboot项目的整体结构 1 entity package com lz palmscore entity import javax persistence Entity import javax persistence Gene