当前位置: 首页 > web >正文

add新增管理员功能、BaseController类的简介--------示例OJ

一、为什么使用BaseController类?

比如add方法:

优化了insert>0这一部分

如何判断新增是否成功,insert方法有返回值,

如果大于0则说明新增成功。

否则新增失败。

类似这种判断会有很多种。难道每次都要写这样的重复代码吗?

因此为了简化代码,我们使用BaseController,封装了返回结果。

根据int正负判断,因此这个部分会写大量代码,是重复的,其他的服务也需要这个判断逻辑
因此在公共中写这个方法,建立一个basecontroller类

优化是为了便于后续维护代码

1.降低代码重复度 

示例:实现add方法

最开始

优化后

return sysUserMapper.insert(sysUser);//再转换为实体

直接return就行了,将返回值改为int。这样在Controller层就直接调用封装方法。

二、完整的实现新增管理员用户功能

2.1BaseController类

toR就是toResult,转换成结果

package com.qyy.common.core.controller;import cn.hutool.core.collection.CollectionUtil;
import com.qyy.common.core.domain.R;
import com.qyy.common.core.domain.TableDataInfo;
import java.util.List;
import com.github.pagehelper.PageInfo;// 封装返回结果,实现一些方法,用来简化代码
public class BaseController {//       if (insert > 0) {
//        return R.ok();
//    }
//        return R.fail();//toResult,如果rows>0  则插入成功,返回ok,// 否则返回failpublic R<Void> toR(int rows) {return rows > 0 ? R.ok() : R.fail();}//       if (result) {
//        return R.ok();
//    }
//        return R.fail();public R<Void> toR(boolean result) {return result ? R.ok() : R.fail();}public TableDataInfo getTableDataInfo(List<?> list) {//list == null || list.isEmpty()if (CollectionUtil.isEmpty(list)) {return TableDataInfo.empty();}
//        new PageInfo<>(list).getTotal(); //获取符合查询条件的数据的总数
//        return TableDataInfo.success(list, list.size());return TableDataInfo.success(list, new PageInfo<>(list).getTotal());}
}

1.封装mapper层返回数据结果为int类型的

    public R<Void> toR(int rows) {return rows > 0 ? R.ok() : R.fail();}

 2.封装mapper层返回数据结果为boolean类型的

public R<Void> toR(boolean result) {return result ? R.ok() : R.fail();}

3. 封装mapper层返回数据结果为List<?>类型的

    public TableDataInfo getTableDataInfo(List<?> list) {//list == null || list.isEmpty()if (CollectionUtil.isEmpty(list)) {return TableDataInfo.empty();}
//        new PageInfo<>(list).getTotal(); //获取符合查询条件的数据的总数
//        return TableDataInfo.success(list, list.size());return TableDataInfo.success(list, new PageInfo<>(list).getTotal());}

 

2.2 SysUserController继承BaseController类

下面我以完整的新增管理员用户功能来演示一遍

  Controller层调用业务逻辑层实现add方法

@RestController
@RequestMapping("/sysUser")
@Tag(name = "管理员接口")
public class SysUserController extends BaseController {@Autowiredprivate ISysUserService sysUserService;//引入业务逻辑层@PostMapping("/add")@Operation(summary = "新增管理员", description = "根据提供的信息新增管理员")@ApiResponse(responseCode = "1000", description = "操作成功")@ApiResponse(responseCode = "2000", description = "服务繁忙请稍后重试")@ApiResponse(responseCode = "3101", description = "用户已存在")public R<Void> add(@RequestBody SysUserSaveDTO sysUserSaveDTO) {return toR(sysUserService.add(sysUserSaveDTO));//调用业务逻辑层,toR是封装返回结果}
}

ISysUserService接口

public interface ISysUserService {int add(SysUserSaveDTO sysUserSaveDTO);
}

实现ISysUserService接口,实现add方法

@Service
@RefreshScope //这个注解可以实现动态刷新配置文件,以达到不重启服务器就刷新配置文件的方式,达到动态刷新配置文件的目的。
@Slf4j
public class SysUserServiceImpl implements ISysUserService {@Autowiredprivate SysUserMapper sysUserMapper;//引入mapper@Overridepublic int add(SysUserSaveDTO sysUserSaveDTO) {//判断用户账号是否已经存在,这是mybatisplus的查询方式List<SysUser> sysUserList = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserAccount, sysUserSaveDTO.getUserAccount()));//这段代码的作用是从数据库中查询SysUser表里所有userAccount与sysUserSaveDTO对象中指定的用户账号相匹配的记录,//并将查询结果集以List<SysUser>的形式返回并赋值给sysUserList变量。这样做的目的是为了根据特定的用户账号信息筛选出对应的用户信息列表。//用hutool工具类判断集合是否为空if (CollectionUtil.isNotEmpty(sysUserList)) {//用户已经存在//自定义的异常   公共的异常类throw new ServiceException(ResultCode.AILED_USER_EXISTS);}SysUser sysUser = new SysUser();//创建一个用户实体类,insert方法要放入实体的sysUser.setUserAccount(sysUserSaveDTO.getUserAccount());//用户账号sysUser.setPassword(BCryptUtils.encryptPassword(sysUserSaveDTO.getPassword()));//用户密码sysUser.setCreateBy(Constants.SYSTEM_USER_ID);//创建人,用户idreturn sysUserMapper.insert(sysUser);//再转换为实体}
}

 

http://www.xdnf.cn/news/16543.html

相关文章:

  • PDF转图片实用指南:如何批量高效转换?
  • AI入门学习-模型评估示例讲解
  • Deja Vu: 利用上下文稀疏性提升大语言模型推理效率
  • 【java】 IntelliJ IDEA高效编程设置指南
  • Day06–哈希表–242. 有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和
  • EMCCD相机与电可调变焦透镜的同步控制系统设计与实现
  • 基于Matlab自适应阈值分割算法的图像处理研究
  • 《Java 程序设计》第 7 章 - 继承与多态
  • 嵌入式学习日志————对射式红外传感器计次
  • 高速采集卡FPGA设计方案及代码
  • 【测试报告】博客系统(Java+Selenium+Jmeter自动化测试)
  • maven命令详解
  • Element表格单元格类名动态设置
  • 可控、安全、可集成:安防RTSP|RTMP视频播放模块工程实践参考
  • Android基础(一) 运行HelloWorld
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘ipywidgets’问题
  • 区块链共识机制与联邦学习
  • 《杜甫传》读书笔记与经典摘要(三)流亡与走向人民
  • Java面试题及详细答案120道之(081-100)
  • 电商项目_核心业务_数据归档
  • 计算机网络:(十二)传输层(上)运输层协议概述
  • 【测试报告】玄机抽奖系统(Java+Selenium+Jmeter自动化测试)
  • KNN 算法中的各种距离:从原理到应用
  • PandasAI连接LLM进行智能数据分析
  • Tkinter美化 - 告别土味Python GUI
  • 医疗AI语义潜空间分析研究:进展与应用
  • 2507C++,APC可以干的活
  • 第二阶段-第二章—8天Python从入门到精通【itheima】-138节(MySQL的综合案例)
  • 记录一次薛定谔bug
  • SpringAI入门及浅实践,实战 Spring‎ AI 调用大模型、提示词工程、对话记忆、Adv‎isor 的使用