欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 二、前后端分离通用权限系统(2)

二、前后端分离通用权限系统(2)

2024/10/25 6:26:00 来源:https://blog.csdn.net/weixin_42171159/article/details/141275178  浏览:    关键词:二、前后端分离通用权限系统(2)

🌻🌻 目录

  • 一、 Mybatis-Plus 复习
    • 1.1、简介
    • 1.2、特点
    • 1.3、支持数据库
    • 1.4、在工程中引入依赖
  • 二、Mybatis-Plus 入门
    • 2.1、导入配置文件
    • 2.2、导入启动类
    • 2.3、实体类
    • 2.4、创建 Mapper 类
    • 2.5、创建测试 Mapper接口
    • 2.6、CRUD 测试
      • 2.6.1、insert 添加
      • 2.6.2、主键策略
      • 2.6.3、更新
      • 2.6.4、删除
        • 2.6.4.1、根据id删除(逻辑删除)
        • 2.6.4.2、批量删除
      • 2.6.5、MyBatis-Plus 条件构造器
    • 2.7、MyBatis-Plus 封装 service 层
      • 2.7.1、添加service接口
      • 2.7.2、添加service接口实现
      • 2.7.3、测试Service接口

一、 Mybatis-Plus 复习

Mybatis-Plus详细总结:中级进阶阶 👉👉 三十五、MyBatis-Plus(1)

官网:https://baomidou.com/

1.1、简介

MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

1.2、特点

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

1.3、支持数据库

MySQLOracleSQLServerPostgreSQLDB2,H2,HSQL,SQLite,Phoenix,Gauss ,ClickHouse,Sybase,OceanBase,Firebird,Cubrid,Goldilocks,csiidb等。

1.4、在工程中引入依赖

依赖前面已经引入了,分析如下:

工程入口依赖:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version>
</dependency>

在这里插入图片描述

在这里插入图片描述

二、Mybatis-Plus 入门

在这里插入图片描述

前面介绍了Mybatis-Plus,当前就以角色管理为例在service-system模块中总结Mybatis-Plus的使用

2.1、导入配置文件

配置 MySQL 数据库的相关配置及Mybatis-Plus日志

在主工程下面的 service-system下面的分别创建 application-dev.ymlapplication.yml 并导入如下面配置:

application-dev.yml

在这里插入图片描述

server:port: 8800
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 查看日志
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/gansu-auth?characterEncoding=utf-8&useSSL=falseusername: rootpassword: root

application.yml

在这里插入图片描述

spring:application:name: service-systemprofiles:active: dev

2.2、导入启动类

  • service-system下面的java下面创建包 com.gansu.system,再创建启动类 ServiceAuthApplication ,导入如下:
  • 再在Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹:

在这里插入图片描述

package com.gansu.system;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@MapperScan("com.gansu.system.mapper")
@SpringBootApplication
public class ServiceAuthApplication {public static void main(String[] args) {SpringApplication.run(ServiceAuthApplication.class, args);}
}

2.3、实体类

引入 实体,到 service-system 如下所示:

在这里插入图片描述

下面实体类说明:

实体类注解 官方详细文档

  • @TableName:表名注解,标识实体类对应的表
  • @TableId:主键注解,type = IdType.AUTO(数据库 ID 自增)
  • @TableField:字段注解(非主键)
  • @TableLogic逻辑删除

在这里插入图片描述

2.4、创建 Mapper 类

java下面创建包 com.gansu.system.mapper 再次创建mapper接口 SysRoleMapper

在这里插入图片描述

package com.gansu.system.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gansu.model.system.SysRole;
import org.springframework.stereotype.Repository;@Repository
public interface SysRoleMapper extends BaseMapper<SysRole> {
}

com.baomidou.mybatisplus.core.mapper.BaseMapper这是Mybatis-Plus提供的默认Mapper接口,点进去可以看到,已经封装好了很多的crud方法。

在这里插入图片描述

2.5、创建测试 Mapper接口

test下面的java下面创建包 com.gansu.system 再次创建测试类 SysRoleMapperTest

在这里插入图片描述

package com.gansu.system;import com.gansu.model.system.SysRole;
import com.gansu.system.mapper.SysRoleMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest
public class SysRoleMapperTest {@Autowiredprivate SysRoleMapper sysRoleMapper;@Test  //org.junit.jupiter.api.Test; 导入 junit5public void test1(){//UserMapper 中的 selectList() 方法的参数为 MP 内置的条件封装器 Wrapper//所以不填写就是无任何条件List<SysRole> sysRoles = sysRoleMapper.selectList(null);for (SysRole sysRole : sysRoles) {System.out.println(sysRole);}}
}

注意:

  • IDEA在sysRoleMapper处报错,因为找不到注入的对象,因为类是动态创建的,但是程序可以正确的执行。
  • 为了避免报错,可以在 mapper 层 的接口上添加 @Repository 或直接使用 @Resource 代替 @Autowired

运行程序控制台输出:

在这里插入图片描述

对比数据库如下:

在这里插入图片描述

通过以上几个简单的步骤,我们就实现了 User 表的 CRUD 功能,甚至连 XML 文件都不用编写!

2.6、CRUD 测试

2.6.1、insert 添加

在这里插入图片描述

@Test  //增加
public void test2(){SysRole sysRole1 = new SysRole();sysRole1.setRoleName("角色管理");sysRole1.setRoleCode("roleManager");sysRole1.setDescription("角色描述");int insert = sysRoleMapper.insert(sysRole1);System.out.println(insert); //影响的行数System.out.println(sysRole1.getId());//id自动会增
}

运行程序控制台输出:

在这里插入图片描述

对比数据库如下:
增加前:

在这里插入图片描述

增加后:

在这里插入图片描述

2.6.2、主键策略

1、ID_WORKER

MyBatis-Plus默认的主键策略是:ID_WORKER 全局唯一ID

2、自增策略

  • 要想主键自增需要配置如下主键策略

    • 需要在创建数据表的时候设置主键自增
    • 实体基类 BaseEntity 字段中配置 @TableId(type = IdType.AUTO)

在这里插入图片描述

在这里插入图片描述

@TableId(type = IdType.AUTO)
private Long id;

2.6.3、更新

在这里插入图片描述

@Test  //更新
public void test3(){SysRole sysRole1 = new SysRole();sysRole1.setId(1824717962347577345L);sysRole1.setRoleName("橘色管理88");sysRole1.setRoleCode("8888888");sysRole1.setDescription("橘色描述");int i = sysRoleMapper.updateById(sysRole1);System.out.println(i); //影响的行数System.out.println(sysRole1.getId());//id不变
}

运行程序控制台输出:

在这里插入图片描述

更新前:

在这里插入图片描述

更新后:

在这里插入图片描述

2.6.4、删除

在这里插入图片描述

2.6.4.1、根据id删除(逻辑删除)

如果数据库中没有delete这个字段则会物理删除

配置:application-dev.yml 中添加:

在这里插入图片描述

spring:mybatis-plus:global-config:db-config:logic-delete-value: 1logic-not-delete-value: 0

在这里插入图片描述

@Test  //更具id删除
public void test4(){sysRoleMapper.deleteById(1824717962347577345L);}

运行程序控制台输出:

在这里插入图片描述

删除前:

在这里插入图片描述

删除后:

在这里插入图片描述

2.6.4.2、批量删除

在这里插入图片描述

@Test  //更具id删除
public void test4(){//逻辑删除// sysRoleMapper.deleteById(1824717962347577345L);//批量删除sysRoleMapper.deleteBatchIds(Arrays.asList(1824717962347577346L,1824717962347577347L));}

运行程序控制台输出:

在这里插入图片描述

删除前:

在这里插入图片描述

删除后:

在这里插入图片描述

再次查询,则如下显示,查询不到:

在这里插入图片描述

2.6.5、MyBatis-Plus 条件构造器

在这里插入图片描述

Wrapper : 条件构造抽象类,最顶端父类

  • AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
    –​ QueryWrapper : Entity 对象封装操作类,不是用lambda语法
    –​ UpdateWrapper : Update 条件封装,用于Entity对象更新操作
    –​ AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
    –​ - LambdaQueryWrapper :看名称也能明白就是用于Lambda语法使用的查询Wrapper
    –​ - LambdaUpdateWrapper : Lambda 更新封装Wrapper

注意:以下条件构造器的方法入参中的 column 均表示数据库字段

① 根据用户名查询和用户名模糊查询

在这里插入图片描述

@Test  //模糊查询
public void test5(){//1.创建构造器QueryWrapper<SysRole> wrapper = new QueryWrapper<>();//wrapper.eq("role_name","普通管理员");wrapper.like("role_name","管理员");List<SysRole> sysRoles = sysRoleMapper.selectList(wrapper);System.out.println(sysRoles);
}

在这里插入图片描述

在这里插入图片描述

控制台输出:

在这里插入图片描述

在这里插入图片描述

② 根据用户名删除

在这里插入图片描述

@Test  //删除
public void test6(){//1.创建构造器QueryWrapper<SysRole> wrapper = new QueryWrapper<>();wrapper.eq("role_name","用户管理员");sysRoleMapper.delete(wrapper);
}

控制台输出:

在这里插入图片描述

删除前:

在这里插入图片描述

删除后:

在这里插入图片描述

其他条件构造有兴趣的可自行测试也可以参考详细总结里面的。

2.7、MyBatis-Plus 封装 service 层

2.7.1、添加service接口

① 在 service-system 下面创建包 com.gansu.system.service,再在下面创建 接口 SysRoleService,并继承mybatisPlus接口 IService

在这里插入图片描述

com.baomidou.mybatisplus.extension.service.IService这是Mybatis-Plus提供的默认Service接口。

package com.gansu.system.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.gansu.model.system.SysRole;public interface SysRoleService extends IService<SysRole> {}

2.7.2、添加service接口实现

② 再创建包 com.gansu.system.service.impl 并且创建接口实现类 SysRoleServiceImpl ,并继承 Mybatis-Plus提供的默认类 ServiceImpl

在这里插入图片描述

package com.gansu.system.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gansu.model.system.SysRole;
import com.gansu.system.mapper.SysRoleMapper;
import com.gansu.system.service.SysRoleService;@Service
public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper,SysRole> implements SysRoleService {}

源码分析:

在这里插入图片描述

com.baomidou.mybatisplus.extension.service.impl.ServiceImpl这是Mybatis-Plus提供的默认Service接口实现。

2.7.3、测试Service接口

还原数据库表sys_role字段is_deleted所有为0,便于下面测试

在这里插入图片描述

在原先包下面创建测试类 SysRoleServiceTest

在这里插入图片描述

package com.gansu.system;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.gansu.model.system.SysRole;
import com.gansu.system.service.SysRoleService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.stereotype.Repository;import java.util.List;@SpringBootTest
public class SysRoleServiceTest {@Autowiredprivate SysRoleService sysRoleService;@Test //查询所有public void test1(){List<SysRole> list = sysRoleService.list();for (SysRole sysRole : list) {System.out.println(sysRole);}}@Test //增加public void test2(){SysRole sysRole1 = new SysRole();sysRole1.setRoleName("角色818");sysRole1.setRoleCode("818");sysRole1.setDescription("角色818描述");sysRoleService.save(sysRole1);}@Test //更新public void test3(){SysRole sysRole1 = new SysRole();sysRole1.setId(1824717962347577347L);sysRole1.setRoleName("818");sysRoleService.updateById(sysRole1);}@Test //删除public void test4(){sysRoleService.removeById(1824717962347577347L);}@Test //模糊查询public void test5(){QueryWrapper<SysRole> wrapper = new QueryWrapper<SysRole>();wrapper.like("role_name","818");sysRoleService.list(wrapper);}
}

数据库最后显示:

在这里插入图片描述

文章源码

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com