【慧游鲁博】【2】结合mybatis-plus·逻辑合规·dto/vo添加·redis封装·错误码封装·时间自动填充

后端修改

文章目录

  • 后端修改
      • 彻底结合mybatis-plus,对user进行增删改查(分页)
        • mapper层
        • service层
      • 分离登录校验和用户信息管理
      • 添加`dto`、`vo`
      • 新增`RedisConfig`,进行redis的方法的封装
      • 错误码的封装Error类
      • 新增`TimeMetaObjectHandler`用于时间字段自动填充

后端修改后框架如下:

museum/  
├─main/                                   # 主代码目录  
│  ├─java/  
│  │  └─com/  
│  │      └─museum/  
│  │          │  MuseumApplication.java   # Spring Boot 启动类(含main方法)  
│  │          │  
│  │          ├─common/                   # 通用模块  
│  │          │  │  PageBean.java         # 分页数据封装(页码、条数、总记录数)  
│  │          │  │  Result.java           # 统一响应格式(code/msg/data结构)  
│  │          │  └─enums/  
│  │          │          ErrorCode.java    # 错误码枚举(如200=成功,401=未授权)  
│  │          │  
│  │          ├─config/                   # 配置模块  
│  │          │      MyBatisPlusConfig.java  # MP配置(分页插件、自动填充)  
│  │          │      RedisConfig.java      # Redis连接池与序列化配置  
│  │          │      TimeMetaObjectHandler.java # MP时间自动填充(create/update_time)  
│  │          │      WebConfig.java        # Web配置(拦截器、跨域处理)  
│  │          │  
│  │          ├─controller/               # 控制层  
│  │          │      UserController.java  # 用户相关HTTP接口(注册、登录、查询等)  
│  │          │  
│  │          ├─dto/                       # 数据传输对象  
│  │          │      UserLoginDTO.java     # 登录参数(username+password)  
│  │          │      UserRegisterDTO.java  # 注册参数(含密码确认字段)  
│  │          │  
│  │          ├─exception/                 # 异常处理  
│  │          │      GlobalExceptionHandler.java # 全局异常处理器(统一返回格式)  
│  │          │  
│  │          ├─interceptors/              # 拦截器  
│  │          │      LoginInterceptor.java # 登录拦截器(Token校验与用户信息存储)  
│  │          │  
│  │          ├─mapper/                   # 数据访问层  
│  │          │      UserMapper.java      # MyBatis-Plus用户表Mapper接口  
│  │          │  
│  │          ├─pojo/                     # 实体类  
│  │          │      User.java            # 用户表实体(定义字段及自动填充规则)  
│  │          │  
│  │          ├─service/                   # 服务层  
│  │          │  │  AuthService.java      # 认证服务接口(登录逻辑定义)  
│  │          │  │  UserService.java      # 用户管理服务接口  
│  │          │  └─impl/  
│  │          │          AuthServiceImpl.java # 认证实现(密码加密、Token生成)  
│  │          │          UserServiceImpl.java # 用户管理实现(CRUD操作)  
│  │          │  
│  │          ├─utils/                    # 工具类  
│  │          │      JwtUtil.java          # JWT工具(生成/解析Token)  
│  │          │      Md5Util.java          # MD5加密工具(密码加密)  
│  │          │      ThreadLocalUtil.java  # 线程变量工具(存储当前用户信息)  
│  │          │  
│  │          └─vo/                       # 视图对象  
│  │                  UserVO.java          # 用户VO(隐藏敏感字段如password)  
│  │  
│  └─resources/                           # 资源目录  
│      │  application.yml                 # 配置文件
│      └─com/museum/                      # MyBatis XML映射文件不需要不需要!!! 
│  
└─test/                                   # 测试代码目录  
    └─java/  
        └─com/  
            └─museum/  
                    Demo.java             # 示例测试类  
                    JwtTest.java          # JWT工具测试(Token生成与解析验证)  
                    RedisTest.java        # Redis连接与操作测试  
                    ThreadLocalTest.java  # 线程变量存取测试  

主要改进的点为:

彻底结合mybatis-plus,对user进行增删改查(分页)

上次是搭建好项目后再配置的mybatis-plus,其实代码中更多的使用了自己编写的增删改查,而不是使用的mybatis-plus已经提供的

那么这段时间就针对这个问题,修改的全部代码

mapper层
@Mapper
public interface UserMapper extends BaseMapper<User> {
    // MyBatis-Plus已经提供了基本的CRUD方法
    // 只需要添加自定义查询方法
    // 通过注入sql语句添加自定义方法
}

这里其实对于MP的增删改查来说,不需要构建mapper.xml文件

我的解决方法是:

  • 在启动类添加 @MapperScan

    @SpringBootApplication
    @MapperScan("com.museum.mapper")
    public class MuseumApplication {
        public static void main(String[] args) {
            SpringApplication.run(MuseumApplication.class, args);
        }
    }
    
  • pom文件解决依赖冲突,同时显式指定 MyBatis 版本,防止使用默认的

    
    <dependency>
      <groupId>com.baomidougroupId>
      <artifactId>mybatis-plus-boot-starterartifactId>
      <version>3.5.4version> 
    dependency>
    
    <dependency>
      <groupId>org.mybatisgroupId>
      <artifactId>mybatisartifactId>
      <version>3.5.13version>
    dependency>
    <dependency>
      <groupId>org.mybatisgroupId>
      <artifactId>mybatis-springartifactId>
      <version>3.0.3version>
    dependency>
    
  • 移除yml文件中以下配置

    mybatis-plus:
      mapper-locations: classpath:mapper/*.xml
    
service层

service

public interface UserService extends IService<User> {
   //需要使用的各方法头
}

serviceImpl

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
	//实现Service里面定义的方法
}

分离登录校验和用户信息管理

为什么?

  • 用户信息涉及到数据库表的增删改查,而登录校验更多的涉及到一些逻辑问题

故新添加AuthServiceImpl,里面进行登录逻辑的处理

添加dtovo

dto用于前后端数据传输,vo用于前端数据展示,有统一的编写规范

以user为例:

  • dto
    • UserLoginDTO:登录时的用户信息,包含用户名和密码
    • UserRegisterDTO:注册时的用户信息,包含用户名、密码和确认密码
  • UserVO
    • 用户信息可以展示在前端的部分,故去掉user中的密码字段

新增RedisConfig,进行redis的方法的封装

  • 封装了常见的 Redis 操作(如 set、get、delete、hasKey),隐藏底层模板代码。
  • 其他组件可以直接调用 Redis 操作。
  • 避免在业务代码中直接操作 StringRedisTemplate,提高代码复用性和可维护性。
  • 依赖注入 StringRedisTemplate,确保 Redis 连接池和序列化配置生效。

错误码的封装Error类

  • 每个错误码对应明确的错误描述(如 PARAMS_ERROR 表示参数校验失败),避免我们团队随意编写错误描述导致前后端理解不一致。
  • 错误信息统一管理,新增错误类型时,只需在枚举中添加一行代码,无需修改其他模块。
  • 区分 HTTP 状态码与业务错误码
  • 通过错误信息,我们在开发时可以根据错误码直接追溯错误场景

新增TimeMetaObjectHandler用于时间字段自动填充

这样可以使用mybatis-plus的自动填充处理器, 统一处理数据库表的时间字段自动填充(如 create_time 和 update_time)

ok!经过测试,修改后的后端正常运行!✌

你可能感兴趣的:(创新实训个人记录,spring,boot,后端,软件工程,mybatis)