用户模块管理

本文档详细介绍了Spring Boot中用户模块的管理,包括用户列表的分页查询,通过PageResult对象实现,用户状态的修改,使用PUT请求更新,并提供了用户删除和新增的接口及其实现。此外,还涵盖了事务控制和全局异常处理机制,确保数据操作的完整性和系统稳定性。
摘要由CSDN通过智能技术生成

1. 用户模块管理

1.1 用户列表展现

1.1.1 业务接口文档

参数名称参数说明备注信息
query用户查询的数据可以为null
pageNum分页查询的页数必须赋值不能为null
pageSize分页查询的条数必须赋值不能为null
  • 响应参数: SysResult对象 需要携带分页对象 PageResult

参数名称参数说明备注信息
status状态信息200表示服务器请求成功 201表示服务器异常
msg服务器返回的提示信息可以为null
data服务器返回的业务数据返回值PageResult对象
  • 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.2 编辑PageResult对象

 package com.jt.vo;
 ​
 import lombok.Data;
 import lombok.experimental.Accessors;
 ​
 import java.io.Serializable;
 ​
 @Data
 @Accessors(chain = true)
 public class PageResult implements Serializable {
     private String query;       //用户查询的数据
     private Integer pageNum;    //查询页数
     private Integer pageSize;   //查询条数
     private Long total;         //查询总记录数
     private Object rows;        //分页查询的结果
 }

1.1.3 编辑UserController

 /**
      * 需求: 将用户列表进行分页查询
      * URL:  /user/list
      * 参数: query=查询关键字&pageNum=1&pageSize=10
      * 请求类型: get
      * 返回值: SysResult(pageResult)
      */
     @GetMapping("/list")
     public SysResult findUserList(PageResult pageResult){//3
         pageResult = userService.findUserList(pageResult);//+2
         return SysResult.success(pageResult);
     }

1.1.4 编辑UserService

  1. 编辑业务接口

public interface UserService {
 ​
     PageResult findUserList(PageResult pageResult);
 }
  1. 编辑UserServiceImpl实现类

/**
      * 分页查询的Sql:
      *  SELECT * FROM USER LIMIT 起始位置,查询条数
      *  第一页: 每页10条
      *  SELECT * FROM USER LIMIT 0,10
      *  第二页: 每页10条
      *  SELECT * FROM USER LIMIT 10,10
      *  第N页:
      *  SELECT * FROM USER LIMIT (n-1)*10,10
      * @param pageResult
      * @return
      */
     @Override
     public PageResult findUserList(PageResult pageResult) {
         //1.总记录数
         long total = userMapper.findTotal();
         //2.获取分页查询的结果
         int start = (pageResult.getPageNum() - 1) * pageResult.getPageSize();
         int size = pageResult.getPageSize();
         String query = pageResult.getQuery();
         List<User> rows = userMapper.findUserList(start,size,query);
         return pageResult.setTotal(total).setRows(rows);
     }

1.1.5 编辑UserMapper

1.编辑Mapper接口

//只支持单值传参 封装为map集合
  List<User> findUserList(@Param("start") int start,@Param("size") int size,@Param("query") String query);
  1. 编辑UserMapper.xml映射文件

 <!--表名必须小写 简化操作全部小写 ctrl+shift+y/u
         业务需求: query属性可能有值/可能没有值 形成动态sql
     -->
     <select id="findUserList" resultType="User">
         select * from user
             <where>
                 <if test="query !=null and query !=''">username like "%"#{query}"%"</if>
             </where>
             limit #{start},#{size}
     </select>

1.2 用户状态修改

1.2.1 业务说明

说明: 点击页面开关,修改数据表中的status 知识点讲解: \1. 数据库中没有boolean类型 可以使用数值类型代替 true 代替数值1, false 代替数值0 \2. 数据库中可以使用tinyint类型代替boolean. 并且2种类型可以自动转化.

1.2.2 业务接口文档

  • 请求路径 /user/status/{id}/{status}

  • 请求类型 PUT

  • 请求参数: 用户ID/状态值数据

参数名称参数类型参数说明备注信息
idInteger用户ID号不能为null
statusboolean参数状态信息不能为null
  • 返回值结果: SysResult对象

 {"status":200,"msg":"服务器调用成功!","data":null}

1.2.3 编辑UserController

/**
     * 需求: 实现状态修改
     * URL: /user/status/{id}/{status}
     * 参数: id/status
     * 类型: put
     * 返回值: SysResult对象
     */
    @PutMapping("/status/{id}/{status}")
    public SysResult updateStatus(User user){
        userService.updateStatus(user);
        return SysResult.success();
    }

1.2.4 编辑UserService

1.编辑接口

void updateStatus(User user);

2.编辑Service实现类

/**
     * 需求: 修改状态信息
     * 参数: id/status/updated修改时间
     * @param user
     */
    @Override
    public void updateStatus(User user) {
        user.setUpdated(new Date()); //设定当前时间
        userMapper.updateStatus(user);
    }

1.2.5 编辑UserMapper接口

 @Update("update user set status=#{status}," +
            "updated=#{updated} where id=#{id}")
    void updateStatus(User user);

1.3 用户删除操作

1.3.1 业务接口说明

  • 请求路径: /user/{id}

  • 请求类型: delete

  • 请求参数:

参数名称参数说明备注
ID用户ID号不能为null
  • 返回值: SysResult对象

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

1.3.2 编辑UserController

  /**
     * 业务说明:  实现用户数据删除操作
     *  URL: /user/{id}
     *  参数: id
     *  返回值: SysResult对象
     */
    @DeleteMapping("/{id}")
    public SysResult deleteUserById(@PathVariable Integer id){
        userService.deleteUserById(id);
        return SysResult.success();
    }

1.3.3 编辑UserService

1.接口方法
void deleteUserById(Integer id);
2.实现类方法
@Override
 public void deleteUserById(Integer id) {

        userMapper.deleteUserById(id);
}

1.3.4 编辑UserMapper

@Delete("delete from user where id=#{id}")
    void deleteUserById(Integer id);

1.3.5 修改页面JS

 

1.4 用户新增

1.4.1 业务接口文档

  • 请求路径 /user/addUser

  • 请求类型 POST

  • 请求参数: 整个form表单数据封装为js对象进行参数传递

参数名称参数类型参数说明备注信息
usernameString用户名不能为null
passwordString密码不能为null
phoneString电话号码不能为null
emailString密码不能为null
  • 返回值结果: SysResult对象

{"status":200,"msg":"服务器调用成功!","data":null}

1.4.2 编辑UserController

/**
     * 需求: 完成用户新增操作
     * URL地址: /user/addUser
     * 参数:    使用对象接收
     * 返回值:  SysResult
     * 类型: post
     */
    @PostMapping("/addUser")
    public SysResult saveUser(@RequestBody User user){
        userService.saveUser(user);
        return SysResult.success();
    }

1.4.3 编辑UserService

1.编辑UserService接口

 void saveUser(User user);

2.编辑UserServiceImpl实现类

/**
     * 业务:
     *     1.密码进行加密处理
     *     2.设定状态码信息
     *     3.设定创建时间和修改时间
     * @param user
     */
    @Override
    public void saveUser(User user) {
        //将密码加密处理
        String password = user.getPassword();
        Date date = new Date();
        String md5Pass = DigestUtils.md5DigestAsHex(password.getBytes());
        user.setPassword(md5Pass)
                .setStatus(true)
                .setCreated(date)
                .setUpdated(date);
        userMapper.saveUser(user);
    }

1.4.4 编辑Mapper/映射文件

1.编辑Mapper接口

void saveUser(User user);
  1. 编辑Mapper映射文件

<insert id="saveUser">
        insert into user value (null,#{username},#{password},#{phone},
        #{email},#{status},#{created},#{updated})
    </insert>

1.5 用户修改-数据回显

1.5.1 业务接口文档说明

  • 请求路径: /user/{id}

  • 请求类型: GET

  • 返回值: SysResult对象

参数名称参数说明备注
status状态信息200表示服务器请求成功 201表示服务器异常
msg服务器返回的提示信息可以为null
data服务器返回的业务数据返回user对象
  • JSON格式如下:

{
 "status":200,
 "msg":"服务器调用成功!",
 "data":{
	 "created":"2021-02-18T11:17:23.000+00:00",
	 "updated":"2021-05-17T11:33:46.000+00:00",
	 "id":1,
	 "username":"admin",
	 "password":"a66abb5684c45962d887564f08346e8d",
	 "phone":"13111112222",
	 "email":"1235678@qq.com",
	 "status":true,
	 "role":null
	 }
 }

1.5.2 编辑UserController

/**
     * 业务说明: 根据ID查询数据
     * URL:    /user/{id}
     * 参数:    id值
     * 类型:   get
     * 返回值:  SysResult(user对象)
     */
    @GetMapping("/{id}")
    public SysResult findUserById(@PathVariable Integer id){

        User user = userService.findUserById(id);
        return SysResult.success(user);
    }

1.5.3 编辑UserService

1.编辑业务接口代码
User findUserById(Integer id);
2.编辑实现类代码
@Override
    public User findUserById(Integer id) {

        return userMapper.findUserById(id);
    }

1.5.4 编辑UserMapper

@Select("select * from user where id=#{id}")
    User findUserById(Integer id);

1.6 用户修改-数据提交

1.6.1 业务接口说明

  • 请求路径: /user/updateUser

  • 请求类型: PUT

  • 请求参数: User对象结构

参数名称参数说明备注
ID用户ID号不能为null
phone手机信息不能为null
email邮箱地址不能为null
  • 返回值: SysResult对象

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

{
 "status":200,
 "msg":"服务器调用成功!",
 "data":{}
 }

1.6.2 编辑UserController

/**
     * 业务: 实现用户的修改操作
     * URL地址: /user/updateUser
     * 参数:    使用对象User接收
     * 返回值:  SysResult
     * 类型:
     */
    @PutMapping("/updateUser")
    public SysResult updateUser(@RequestBody User user){
        userService.updateUser(user);
        return SysResult.success();
    }

1.6.3 编辑UserService

1.编辑接口
 void updateUser(User user);
2.编辑实现类
 /**
     * 说明: 实现用户的修改
     * 数据: 添加更新时间操作
     * @param user
     */
    @Override
    public void updateUser(User user) {
        user.setUpdated(new Date());
        userMapper.updateUser(user);
    }

1.6.4 编辑UserMapper

1.编辑UserMapper接口
void updateUser(User user);
2. 编辑Mapper映射文件
<!--完成用户的更新操作-->
    <update id="updateUser">
        update user set
            phone=#{phone},
            email=#{email},
            updated=#{updated}
        where id=#{id}
    </update>

2. 业务辅助功能

2.1 事务控制

2.1.1 现象说明

说明: 业务逻辑在执行的过程中,如果中间发生了异常,应该保证事务的一致性.事务应该回滚.但是经过测试,发现执行报异常,但是数据可以正常的入库. 说明方法没有事务的控制.

2.1.2 关于注解说明

名称: @Transactional //事务的注解 特点: 1.Spring中默认对事务进行支持. 2.Spring中默认控制的是运行时异常. 如果是检查异常 Spring不负责处理.

核心原理: AOP

常见案例: @Transactional(rollbackFor = Exception.class) 只要有异常,则全部回滚.

问题: 如果采用上述的代码,则AOP拦截所有的异常,运行效率低. 所以一般只拦截运行时异常.检查异常由程序员手动控制. 总结: 以后操作数据库时 ,新增/删除/修改操作 需要事务控制. 

2.2 全局异常处理机制

2.2.1 业务说明

当用户在进行业务操作时,不管后端服务器执行是否正确,都应该给用户一个正向的回馈!!! 解决方案:

 @PutMapping("/status/{id}/{status}")
    public SysResult updateStatus(User user){
        try {
            userService.updateStatus(user);
            return SysResult.success();
        }catch (Exception e){
            e.printStackTrace();
            return SysResult.fail();
        }
    }

暴露问题: 由于在每个方法中都需要添加try-catch代码 必然会导致代码的可读性低.并且代码繁琐.不便于扩展.

2.2.2 全局异常处理机制实现

package com.jt.aop;

import com.jt.vo.SysResult;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice //advice 通知!!!
//全局异常处理机制,只拦截Controller层
public class SystemException {
    //指定异常的类型进行拦截.
    @ExceptionHandler(RuntimeException.class)
    public SysResult exception(Exception e){
        e.printStackTrace();//控制台打印异常
        return SysResult.fail();//201
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

睡不醒的小小秦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值