CGB2105-Day-13笔记

本文档详细介绍了如何在SpringBoot应用中集成MyBatisPlus,实现用户管理的后台搭建,包括用户查询、分页查询、用户状态修改和用户新增功能。涉及内容包括接口文档、JS流程、服务层和持久层的实现,以及MyBatisPlus的配置和分页拦截器的使用。
摘要由CSDN通过智能技术生成

1、用户管理实现

1.1用户管理后台搭建

1.1.1 表设计

在这里插入图片描述

1.1.2 User pojo对象设计

在这里插入图片描述

1.1.3 页面调用JS流程

  1. 生命周期函数
    在这里插入图片描述
  2. getUserList()函数定义
    在这里插入图片描述

1.1.4 用户查询的业务接口文档

  1. 请求路径: /user/list
  2. 请求类型: GET
  3. 请求参数: 后台使用PageResult对象接收
  4. 请求案例: http://localhost:8091/user/list?query=查询关键字&pageNum=1&pageSize=10
参数名称参数说明备注信息
query用户查询的数据可以为null
pageNum分页查询的页数必须赋值不能为null
pageSize分页查询的条数必须赋值不能为null
  1. 响应参数: SysResult对象 需要携带分页对象 PageResult
参数名称参数说明备注信息
status状态信息200表示服务器请求成功 201表示服务器异常
msg服务器返回的提示信息可以为null
data服务器返回的业务数据返回值PageResult对象
  1. PageResult 对象介绍
参数名称参数类型参数说明备注信息
queryString用户查询的数据可以为null
pageNumInteger查询页数不能为null
pageSizeInteger查询条数不能为null
totalLong查询总记录数不能为null
rowsObject分页查询的结果不能为null
{"status":200,
  "msg":"服务器调用成功!",
  "data":
	{"query":"",
	"pageNum":1,
	"pageSize":2,
	"total":4,
	"rows":[
		{"created":"2021-02-18T11:17:23.000+00:00",
		 "updated":"2021-03-26T06:47:20.000+00:00",
		 "id":1,
		 "username":"admin",
		 "password":"a66abb5684c45962d887564f08346e8d",
		 "phone":"13111112222",
		 "email":"1235678@qq.com",
		 "status":true,
		 "role":null
		 },
		{"created":"2021-02-18T11:17:23.000+00:00",
		"updated":"2021-03-13T08:50:30.000+00:00",
		"id":2,
		"username":"admin123",
		"password":"a66abb5684c45962d887564f08346e8d",
		"phone":"13111112223",
		"email":"1235678@qq.com",
		"status":false,
		"role":null
		}
		]
	}
}

1.1.5 封装PageResult

说明: 该对象主要的作用,封装分页后的结果 其中的数据需要在业务层 赋值.最后由SysResult对象 携带返回给用户.

@Data
@Accessors(chain = true)
public class PageResult
{
    private String query;     // 用户查询的数据
    private Integer pageNum;  // 查询页数
    private Integer pageSize; // 查询条数
    private Long total;       // 查询总记录数
    private  Object rows;     // 分页查询的结果
}

1.1.6 编辑UserController

/**
     *  需求:实现用户的分页查询
     *  请求类型:GET
     *  URL:/user/list
     *  参数:PageResult对象进行接收
     *  返回值对象:SysResult对象(PageResult对象)
     */
    @GetMapping("/list")
    public SysResult UserList(PageResult pageResult)
    {
        // 通过业务处理 获取总数/分页后的结果
        pageResult = userService.getUserList(pageResult);
        return SysResult.souccess(pageResult);
    }

1.1.7 编辑UserServicImpl

 /**
     * 需求: 进行分页查询   总数 分页后的结果
     * 知识铺垫:  每页20条
     *      Sql: select * from user limit 起始位置,每页条数
     *      第一页:
     *          select * from user limit 0,20  下标[0-19]
     *      第二页:
     *          select * from user limit 20,20 下标[20-39]
     *      第三页:
     *          select * from user limit 40,20 下标[40-59]
     *      第N页:
     *          select * from user limit (n-1)*rows,rows
     * @param pageResult
     * @return
     */
     @Override
     public PageResult getUserList(PageResult pageResult)
     {
     	//根据参数动态的执行分页查询!!!!
	     int start = (pageResult.getPageNum() - 1) * pageResult.getPageSize();
	     int size = pageResult.getPageSize();
	     List<User> userList = userMapper.findUserListByPage(start,size);
	     long total = userMapper.selectCount(null);
	     //获取全部记录的总数  利用java 自动拆装箱的规范
	     pageResult.setTotal(total).setRows(userList);
	     return pageResult;
     }

1.1.8 编辑UserMapper

public interface UserMapper extends BaseMapper<User>
{
    /**
     *  如果Sql语句比较简单,可以通过直接注解开发.
     *     @Select("Sql!!!!!")
     *     @Insert("sql")
     *     @Update("sql")
     *     @Delete("sql")
     * @param start
     * @param size
     * @return
     */
    @Select("select * from user limit #{start},#{size}")
    List<User> findUserListByPage(Integer start, Integer size);

1.2 MP方式实现分页查询(API调用!!!)

1.2.1 编辑UserServiceImpl

    /**
     * 以MP的方式分页查询
     * 需求:
     *  1.分页查询 List<user>
     *  2.获取记录总数   封装pageResult对象
     *
     * @param pageResult
     * @return
     */
    @Override
    public PageResult getUserList(PageResult pageResult)
    {
        // 1、Page分页对象
        Page page = new Page(pageResult.getPageNum(),pageResult.getPageSize());
        //参数2: 分页的查询条件  username模糊查询
        //问题:  如果用户没有传递query  like关键字  拼接参数
        //动态拼接: 传参拼接like  condition:true 拼接like条件
        //         false 不拼接 like关键字
        QueryWrapper<User> queryWrapper= new QueryWrapper<>();
        //判断用户是否传参  如果传参 返回true   反之 返回false
        boolean flag = StringUtils.hasLength(pageResult.getQuery());
        queryWrapper.like(flag,"username", pageResult.getQuery());
        //规则: page2个参数 根据分页查询返回 total/分页后的记录 4个参数
        page = userMapper.selectPage(page, queryWrapper);
        //根据分页对象,获取想要的结果
        List<User> userList = page.getRecords();
        long total = page.getTotal();
        pageResult.setTotal(total).setRows(userList);
        return pageResult;
    }

1.2.2

包路径: com.jt.config
说明: MP如果需要进行分页的查询 ,则必须添加配置类.否则分页不能正常执行.
关于配置类的说明:
SpringBoot整合第三方框架时,提供了配置类的机制, 通过这种机制,第三方框架可以实现定制化的对象的创建.

// 1.表示这个类 是一个配置类  目的: 封装对象-交给Spring容器管理
@Configuration
public class MyBaitsPlusConfig
{
    /**
     * @Bean 将方法的返回值对象交给Spring容器管理
     * MP 分页机制 MySQL/Oracle分页语句 为了实现功能复用 需要手动配置
     * 根据数据库类型不同 之后动态的生成Sql  MP才能调用分页对象
     *
     * @return
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor()
    {
        // 定义分页拦截器对象
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MARIADB));
        return interceptor;
    }
}

1.2.3 分页结果

在这里插入图片描述

1.3 用户状态修改

1.3.1 业务接口文档说明

说明: 用户通过开关 控制 状态 true/false 在数据库中 存储true 用1, 存储false 用0

  1. 请求路径:/user/status/{id}/{status}
  2. 请求类型:PUT
  3. 请求参数:用户ID/状态值数据
参数名称参数类型参数说明备注信息
idInteger用户ID号不能为NULL
statusboolean参数状态信息不能NULL

返回值结果:SysResult对象

参数名称参数说明备注
status状态信息200表示服务器请求成功 201表示服务器异常
msg服务器返回的提示信息可以为null
data服务器返回的业务数据可以为null

1.3.2 页面JS分析

说明: 如果修改状态信息,则必须获取当前行的数据. id/status
作用域插槽: 一般在表格循环遍历时,如果需要获取当前行数据,则采用作用域插槽的方式.
作用域插槽用法:
在这里插入图片描述
发起Ajax请求:

async updateStatus(user){
         //实现用户状态修改  注意使用模版字符串  ES6中提出的新用法 ${key}
        //const {data: result} = await this.$http.put('/user/status/'+user.id+'/'+user.status)
        const {data: result} = await this.$http.put(`/user/status/${user.id}/${user.status}`)
        if(result.status !== 200) return this.$message.error("用户状态修改失败!")
        this.$message.success("用户状态修改成功!")
      },

请求路径:
在这里插入图片描述

1.3.3 编辑UserController

在这里插入图片描述

1.3.4 编辑UserServiceImpl

在这里插入图片描述

1.4 用户新增

1.4.1 用户JS分析

在这里插入图片描述

14.2 业务接口文档说明

  1. 请求路径:/user/addUser
  2. 请求类型:POST
  3. 请求参数:整个From表单
参数名称参数类型参数说明备注信息
usernameString用户名不能为NULL
passwordString密码不能为NULL
phoneString电话号码不能为NULL
emailString密码不能为NULL
  1. 返回值结果:SysResult
参数名称参数说明备注
status状态信息200表示服务器请求成功 201表示服务器异常
msg服务器返回的提示信息可以为null
data服务器返回的业务数据可以为null

1.4.3 编辑UserController

/**
     * 业务: 实现用户新增
     * URL: /user/addUser
     * 类型: post类型
     * 参数: 整合form表单数据  JSON串  user对象接收
     * 返回值: SysResult对象
     */
    @PostMapping("/addUser")
    public SysResult insetUser(@RequestBody User user)
    {
        userService.insertUser(user);
        return SysResult.souccess();
    }

1.4.4 编辑UserServiceImpl

/**
     *  新增入库:
     *      1.密码需要加密处理
     *      2.应该赋值默认状态 true
     *      3.需要添加时间  创建/修改
     */
    @Override
    @Transactional
    public void insertUser(User user)
    {
        //1.密码加密
        byte[] bytes = user.getPassword().getBytes();
        String md5Pass = DigestUtils.md5DigestAsHex(bytes);
        user.setPassword(md5Pass);
        //2.添加默认状态
        user.setStatus(true);
        //3.添加时间  目的保证时间统一
         Date date = new Date();
         user.setCreated(date).setUpdated(date);
        //4.实现入库
        userMapper.insert(user);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

直男编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值