首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >add新增管理员功能、BaseController类的简介--------示例OJ

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

作者头像
用户11288958
发布2025-08-01 08:15:00
发布2025-08-01 08:15:00
10200
代码可运行
举报
文章被收录于专栏:学习学习
运行总次数:0
代码可运行

一、为什么使用BaseController类?

比如add方法: 优化了insert>0这一部分 如何判断新增是否成功,insert方法有返回值, 如果大于0则说明新增成功。 否则新增失败。 类似这种判断会有很多种。难道每次都要写这样的重复代码吗? 因此为了简化代码,我们使用BaseController,封装了返回结果。 根据int正负判断,因此这个部分会写大量代码,是重复的,其他的服务也需要这个判断逻辑 因此在公共中写这个方法,建立一个basecontroller类 优化是为了便于后续维护代码 1.降低代码重复度 

示例:实现add方法

最开始

优化后

代码语言:javascript
代码运行次数:0
运行
复制
return sysUserMapper.insert(sysUser);//再转换为实体

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

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

2.1BaseController类

toR就是toResult,转换成结果

代码语言:javascript
代码运行次数:0
运行
复制
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,
    // 否则返回fail
    public 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类型的

代码语言:javascript
代码运行次数:0
运行
复制
    public R<Void> toR(int rows) {
        return rows > 0 ? R.ok() : R.fail();
    }

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

代码语言:javascript
代码运行次数:0
运行
复制
public R<Void> toR(boolean result) {
        return result ? R.ok() : R.fail();
    }

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

代码语言:javascript
代码运行次数:0
运行
复制
    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方法
代码语言:javascript
代码运行次数:0
运行
复制
@RestController
@RequestMapping("/sysUser")
@Tag(name = "管理员接口")
public class SysUserController extends BaseController {

    @Autowired
    private 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接口
代码语言:javascript
代码运行次数:0
运行
复制
public interface ISysUserService {
    int add(SysUserSaveDTO sysUserSaveDTO);
}
实现ISysUserService接口,实现add方法
代码语言:javascript
代码运行次数:0
运行
复制
@Service
@RefreshScope //这个注解可以实现动态刷新配置文件,以达到不重启服务器就刷新配置文件的方式,达到动态刷新配置文件的目的。
@Slf4j
public class SysUserServiceImpl implements ISysUserService {
    @Autowired
    private SysUserMapper sysUserMapper;//引入mapper

    @Override
    public 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);//创建人,用户id

        return sysUserMapper.insert(sysUser);//再转换为实体
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、为什么使用BaseController类?
    • 示例:实现add方法
  • 二、完整的实现新增管理员用户功能
    • 2.1BaseController类
    • 2.2 SysUserController继承BaseController类
      •   Controller层调用业务逻辑层实现add方法
      • ISysUserService接口
      • 实现ISysUserService接口,实现add方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档