当前位置: 首页 > news >正文

权限模块开发+权限与角色关联(完整CRUD)

文章目录

  • 🌞 Sun Frame:SpringBoot 的轻量级开发框架(个人开源项目推荐)
    • 🌟 亮点功能
    • 📦 spring cloud模块概览
      • 常用工具
    • 🔗 更多信息
    • 1.easycode生成代码
        • 1.配置
        • 2.AuthPermissionDao.java剪切到mapper
        • 3.AuthPermission.java使用lombok优化
        • 4.AuthPermissionDao.java 删除Pageable
        • 5.AuthPermissionDao.xml 全局替换为空
        • 6.AuthPermissionService.java 删除分页查询接口
        • 7.AuthPermissionServiceImpl.java 删除分页查询实现类
    • 2.编写DTO和BO
        • 1.sun-club-auth-application-controller
          • 1.AuthPermissionDTO.java
          • 2.AuthPermissionDTOConverter.java
        • 2.sun-club-auth-domain
          • 1.AuthPermissionBO.java
          • 2.AuthPermissionBOConverter.java
    • 3.新增权限
        • 1.PermissionController.java
        • 2.sun-club-auth-domain
          • 1.AuthPermissionDomainService.java
          • 2.AuthPermissionDomainServiceImpl.java
        • 3.sun-club-auth-infra
          • 1.AuthPermissionService.java
          • 2.AuthPermissionServiceImpl.java
        • 4.测试
          • 1.接口设计
          • 2.测试
    • 4.更新权限
        • 1.PermissionController.java
        • 2.sun-club-auth-domain
          • 1.AuthPermissionDomainService.java
          • 2.AuthPermissionDomainServiceImpl.java
        • 3.sun-club-auth-infra
          • 1.AuthPermissionService.java
          • 2.AuthPermissionServiceImpl.java
          • 3.AuthPermissionDao.xml 注意show是关键字
        • 4.测试
          • 1.接口设计
          • 2.测试
    • 5.删除权限
        • 1.PermissionController.java
        • 2.AuthPermissionDomainService.java
        • 3.AuthPermissionDomainServiceImpl.java
        • 4.测试
          • 1.接口设计
          • 2.测试
    • 6.权限与角色关联
        • 1.easycode生成代码
          • 1.配置
          • 2.dao层AuthRolePermissionDao.java的移动到mapper层
          • 3.AuthRolePermission.java 使用lombok优化
          • 4.AuthRolePermissionDao.java 删除Pageable
          • 5.AuthRolePermissionDao.xml 全局替换掉, INTEGER之类的
          • 6.AuthRolePermissionService.java 删除分页查询接口
          • 7.AuthRolePermissionServiceImpl.java 删除分页查询实现类
        • 2.编写DTO和BO
          • 1.sun-club-auth-application-controller
            • 1.AuthRolePermissionDTO.java
            • 2.AuthRolePermissionDTOConverter.java
          • 2.sun-club-auth-domain
            • 1.AuthRolePermissionBO.java
            • 2.AuthRolePermissionBOConverter.java
        • 3.sun-club-auth-application-controller
          • 1.AuthRolePermissionDTO.java 新增permissionIdList字段
          • 2.RolePermissionController.java
        • 4.sun-club-auth-domain
          • 1.AuthRolePermissionDomainService.java
          • 2.AuthRolePermissionDomainServiceImpl.java
          • 3.AuthRolePermissionBO.java 保持跟DTO一致
        • 5.sun-club-auth-infra
          • 1.AuthRolePermissionService.java
          • 2.AuthRolePermissionServiceImpl.java
        • 6.测试
          • 1.接口设计
          • 2.测试

🌞 Sun Frame:SpringBoot 的轻量级开发框架(个人开源项目推荐)

Sun Frame Banner

轻松高效的现代化开发体验

Sun Frame 是我个人开源的一款基于 SpringBoot 的轻量级框架,专为中小型企业设计。它提供了一种快速、简单且易于扩展的开发方式。

我们的开发文档记录了整个项目从0到1的任何细节,实属不易,请给我们一个Star!🌟
您的支持是我们持续改进的动力。

🌟 亮点功能

  • 组件化开发:灵活选择,简化流程。
  • 高性能:通过异步日志和 Redis 缓存提升性能。
  • 易扩展:支持多种数据库和消息队列。

📦 spring cloud模块概览

  • Nacos 服务:高效的服务注册与发现。
  • Feign 远程调用:简化服务间通信。
  • 强大网关:路由与限流。

常用工具

  • 日志管理:异步处理与链路追踪。
  • Redis 集成:支持分布式锁与缓存。
  • Swagger 文档:便捷的 API 入口。
  • 测试支持:SpringBoot-Test 集成。
  • EasyCode:自定义EasyCode模板引擎,一键生成CRUD。

🔗 更多信息

  • 开源地址:Gitee Sun Frame
  • 详细文档:语雀文档
    在这里插入图片描述

1.easycode生成代码

1.配置

image-20240606171545969

2.AuthPermissionDao.java剪切到mapper

image-20240606171805496

3.AuthPermission.java使用lombok优化

image-20240606171938091

4.AuthPermissionDao.java 删除Pageable

image-20240606171830556

5.AuthPermissionDao.xml 全局替换为空
, VARCHAR
, INTEGER
, TIMESTAMP

image-20240606172109479

image-20240606172203067

6.AuthPermissionService.java 删除分页查询接口
7.AuthPermissionServiceImpl.java 删除分页查询实现类

2.编写DTO和BO

1.sun-club-auth-application-controller
1.AuthPermissionDTO.java
package com.sunxiansheng.auth.application.dto;import lombok.Data;import java.io.Serializable;/*** (AuthPermission)dto** @author makejava* @since 2024-06-06 17:16:58*/
@Data
public class AuthPermissionDTO implements Serializable {private Long id;/*** 权限名称*/private String name;/*** 父id*/private Long parentId;/*** 权限类型 0菜单 1操作*/private Integer type;/*** 菜单路由*/private String menuUrl;/*** 状态 0启用 1禁用*/private Integer status;/*** 展示状态 0展示 1隐藏*/private Integer show;/*** 图标*/private String icon;/*** 权限唯一标识*/private String permissionKey;/*** 是否被删除 0为删除 1已删除*/private Integer isDeleted;}
2.AuthPermissionDTOConverter.java
package com.sunxiansheng.auth.application.convert;import com.sunxiansheng.auth.application.dto.AuthPermissionDTO;
import com.sunxiansheng.auth.domain.entity.AuthPermissionBO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;import java.util.List;/*** Description: DTO转换* @Author sun* @Create 2024/6/5 15:39* @Version 1.0*/
@Mapper
public interface AuthPermissionDTOConverter {AuthPermissionDTOConverter INSTANCE = Mappers.getMapper(AuthPermissionDTOConverter.class);// 将DTO转换为BOAuthPermissionBO convertDTO2BO(AuthPermissionDTO authPermissionDTO);// 将BO转换为DTOAuthPermissionDTO convertBO2DTO(AuthPermissionBO authPermissionBO);// 将DTO集合转换为BO集合List<AuthPermissionBO> convertDTO2BO(List<AuthPermissionDTO> authPermissionDTOList);// 将BO集合转换为DTO集合List<AuthPermissionDTO> convertBO2DTO(List<AuthPermissionBO> authPermissionBOList);}
2.sun-club-auth-domain
1.AuthPermissionBO.java
package com.sunxiansheng.auth.domain.entity;import lombok.Data;import java.io.Serializable;/*** (AuthPermission)bo** @author makejava* @since 2024-06-06 17:16:58*/
@Data
public class AuthPermissionBO implements Serializable {private Long id;/*** 权限名称*/private String name;/*** 父id*/private Long parentId;/*** 权限类型 0菜单 1操作*/private Integer type;/*** 菜单路由*/private String menuUrl;/*** 状态 0启用 1禁用*/private Integer status;/*** 展示状态 0展示 1隐藏*/private Integer show;/*** 图标*/private String icon;/*** 权限唯一标识*/private String permissionKey;/*** 是否被删除 0为删除 1已删除*/private Integer isDeleted;}
2.AuthPermissionBOConverter.java
package com.sunxiansheng.auth.domain.convert;import com.sunxiansheng.auth.basic.entity.AuthPermission;
import com.sunxiansheng.auth.domain.entity.AuthPermissionBO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;import java.util.List;/*** Description: BO转换* @Author sun* @Create 2024/5/24 9:18* @Version 1.0*/
@Mapper // mapstruct的注解
public interface AuthPermissionBOConverter {AuthPermissionBOConverter INSTANCE = Mappers.getMapper(AuthPermissionBOConverter.class);// 将BO转换为EntityAuthPermission convertBO2Entity(AuthPermissionBO authPermissionBO);// 将Entity转换为BOAuthPermissionBO convertEntity2BO(AuthPermission authPermission);// 将BO集合转换为Entity集合List<AuthPermission> convertBO2Entity(List<AuthPermissionBO> authPermissionBOList);// 将Entity集合转换为BO集合List<AuthPermissionBO> convertEntity2BO(List<AuthPermission> authPermissionList);}

3.新增权限

1.PermissionController.java
package com.sunxiansheng.auth.application.controller;import com.alibaba.fastjson.JSON;
import com.google.common.base.Preconditions;
import com.sunxiansheng.auth.application.convert.AuthPermissionDTOConverter;
import com.sunxiansheng.auth.application.dto.AuthPermissionDTO;
import com.sunxiansheng.auth.common.eneity.Result;
import com.sunxiansheng.auth.domain.entity.AuthPermissionBO;
import com.sunxiansheng.auth.domain.service.AuthPermissionDomainService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;/*** Description:* @Author sun* @Create 2024/6/2 17:25* @Version 1.0*/
@RestController
@RequestMapping("/permission/")
@Slf4j
public class PermissionController {@Resourceprivate AuthPermissionDomainService authPermissionDomainService;/*** 新增权限信息* @param authPermissionDTO* @return*/@RequestMapping("add")public Result<Boolean> add(@RequestBody AuthPermissionDTO authPermissionDTO) {try {// 日志if (log.isInfoEnabled()) {log.info("PermissionController add AuthPermissionDTO, authPermissionDTO:{}", JSON.toJSONString(authPermissionDTO));}// 参数校验Preconditions.checkArgument(!StringUtils.isBlank(authPermissionDTO.getName()), "权限名称不能为空");Preconditions.checkNotNull(authPermissionDTO.getParentId(), "父ID不能为空");// 转换DTO为BOAuthPermissionBO authPermissionBO = AuthPermissionDTOConverter.INSTANCE.convertDTO2BO(authPermissionDTO);// 调用领域服务// 新增权限信息Boolean res = authPermissionDomainService.add(authPermissionBO);return Result.ok(res);} catch (Exception e) {// error日志log.error("PermissionController add error:{}", e.getMessage(), e);return Result.fail("新增权限信息失败");}}}
2.sun-club-auth-domain
1.AuthPermissionDomainService.java
package com.sunxiansheng.auth.domain.service;import com.sunxiansheng.auth.domain.entity.AuthPermissionBO;/*** Description:* @Author sun* @Create 2024/5/24 9:03* @Version 1.0*/
public interface AuthPermissionDomainService {/*** 添加* @param authPermissionBO* @return*/Boolean add(AuthPermissionBO authPermissionBO);
}
2.AuthPermissionDomainServiceImpl.java
package com.sunxiansheng.auth.domain.service.impl;import com.sunxiansheng.auth.basic.entity.AuthPermission;
import com.sunxiansheng.auth.basic.entity.AuthRole;
import com.sunxiansheng.auth.basic.service.AuthPermissionService;
import com.sunxiansheng.auth.common.enums.IsDeleteFlagEnum;
import com.sunxiansheng.auth.domain.convert.AuthPermissionBOConverter;
import com.sunxiansheng.auth.domain.convert.AuthRoleBOConverter;
import com.sunxiansheng.auth.domain.entity.AuthPermissionBO;
import com.sunxiansheng.auth.domain.service.AuthPermissionDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;import javax.annotation.Resource;/*** Description:* @Author sun* @Create 2024/5/24 9:03* @Version 1.0*/
@Service
@Slf4j
public class AuthPermissionDomainServiceImpl implements AuthPermissionDomainService {@Resourceprivate AuthPermissionService authPermissionService;@Overridepublic Boolean add(AuthPermissionBO authPermissionBO) {// BO转换为EntityAuthPermission authPermission = AuthPermissionBOConverter.INSTANCE.convertBO2Entity(authPermissionBO);// 调用基础服务// 设置逻辑删除authPermission.setIsDeleted(IsDeleteFlagEnum.UN_DELETED.getCode());// 新增角色Integer count = authPermissionService.insert(authPermission);return count > 0;}
}
3.sun-club-auth-infra
1.AuthPermissionService.java
/*** 新增数据** @param authPermission 实例对象* @return 实例对象*/
Integer insert(AuthPermission authPermission);
2.AuthPermissionServiceImpl.java
/*** 新增数据** @param authPermission 实例对象* @return 实例对象*/
@Override
public Integer insert(AuthPermission authPermission) {return this.authPermissionDao.insert(authPermission);
}
4.测试
1.接口设计

image-20240607134524294

2.测试

image-20240607134537429

image-20240607134552723

4.更新权限

1.PermissionController.java
@RequestMapping("update")
public Result<Boolean> update(@RequestBody AuthPermissionDTO authPermissionDTO) {try {// 日志if (log.isInfoEnabled()) {log.info("PermissionController update AuthPermissionDTO, authPermissionDTO:{}", JSON.toJSONString(authPermissionDTO));}// 参数校验Preconditions.checkNotNull(authPermissionDTO.getId(), "权限ID不能为空");// 转换DTO为BOAuthPermissionBO authPermissionBO = AuthPermissionDTOConverter.INSTANCE.convertDTO2BO(authPermissionDTO);// 调用领域服务// 修改权限信息Boolean res = authPermissionDomainService.update(authPermissionBO);return Result.ok(res);} catch (Exception e) {// error日志log.error("PermissionController update error:{}", e.getMessage(), e);return Result.fail("修改权限信息失败");}
}
2.sun-club-auth-domain
1.AuthPermissionDomainService.java
/*** 修改* @param authPermissionBO* @return*/
Boolean update(AuthPermissionBO authPermissionBO);
2.AuthPermissionDomainServiceImpl.java
@Override
public Boolean update(AuthPermissionBO authPermissionBO) {// BO转换为EntityAuthPermission authPermission = AuthPermissionBOConverter.INSTANCE.convertBO2Entity(authPermissionBO);// 调用基础服务// 修改权限信息Integer count = authPermissionService.update(authPermission);// 有任何的更新,都要与缓存进行同步的修改,要把当前用户的角色和权限都放到redis里return count > 0;
}
3.sun-club-auth-infra
1.AuthPermissionService.java
/*** 修改数据** @param authPermission 实例对象* @return 实例对象*/
Integer update(AuthPermission authPermission);
2.AuthPermissionServiceImpl.java
/*** 修改数据** @param authPermission 实例对象* @return 实例对象*/
@Override
public Integer update(AuthPermission authPermission) {return this.authPermissionDao.update(authPermission);
}
3.AuthPermissionDao.xml 注意show是关键字

image-20240607135659759

4.测试
1.接口设计

image-20240607135729090

2.测试

image-20240607135757069

image-20240607135814199

5.删除权限

1.PermissionController.java
/*** 删除权限信息* @param authPermissionDTO* @return*/
@RequestMapping("delete")
public Result<Boolean> delete(@RequestBody AuthPermissionDTO authPermissionDTO) {try {// 日志if (log.isInfoEnabled()) {log.info("PermissionController delete AuthPermissionDTO, authPermissionDTO:{}", JSON.toJSONString(authPermissionDTO));}// 参数校验Preconditions.checkNotNull(authPermissionDTO.getId(), "权限ID不能为空");// 转换DTO为BOAuthPermissionBO authPermissionBO = AuthPermissionDTOConverter.INSTANCE.convertDTO2BO(authPermissionDTO);// 调用领域服务// 删除权限信息Boolean res = authPermissionDomainService.delete(authPermissionBO);return Result.ok(res);} catch (Exception e) {// error日志log.error("PermissionController delete error:{}", e.getMessage(), e);return Result.fail("删除权限信息失败");}
}
2.AuthPermissionDomainService.java
/*** 删除* @param authPermissionBO* @return*/
Boolean delete(AuthPermissionBO authPermissionBO);
3.AuthPermissionDomainServiceImpl.java
@Override
public Boolean delete(AuthPermissionBO authPermissionBO) {// BO转换为EntityAuthPermission authPermission = AuthPermissionBOConverter.INSTANCE.convertBO2Entity(authPermissionBO);// 设置逻辑删除authPermission.setIsDeleted(IsDeleteFlagEnum.DELETED.getCode());// 更新Integer count = authPermissionService.update(authPermission);return count > 0;
}
4.测试
1.接口设计

image-20240607140428992

2.测试

image-20240607140442342

image-20240607140504097

6.权限与角色关联

1.easycode生成代码
1.配置

image-20240607141131511

2.dao层AuthRolePermissionDao.java的移动到mapper层
3.AuthRolePermission.java 使用lombok优化
4.AuthRolePermissionDao.java 删除Pageable
5.AuthRolePermissionDao.xml 全局替换掉, INTEGER之类的
6.AuthRolePermissionService.java 删除分页查询接口
7.AuthRolePermissionServiceImpl.java 删除分页查询实现类
2.编写DTO和BO
1.sun-club-auth-application-controller
1.AuthRolePermissionDTO.java
package com.sunxiansheng.auth.application.dto;import lombok.Data;import java.io.Serializable;/*** 角色权限关联表(AuthRolePermission)实体类** @author makejava* @since 2024-06-07 14:11:29*/
@Data
public class AuthRolePermissionDTO implements Serializable {private Long id;/*** 角色id*/private Long roleId;/*** 权限id*/private Long permissionId;private Integer isDeleted;}
2.AuthRolePermissionDTOConverter.java
package com.sunxiansheng.auth.application.convert;import com.sunxiansheng.auth.application.dto.AuthRolePermissionDTO;
import com.sunxiansheng.auth.domain.entity.AuthRolePermissionBO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;import java.util.List;/*** Description: DTO转换* @Author sun* @Create 2024/6/5 15:39* @Version 1.0*/
@Mapper
public interface AuthRolePermissionDTOConverter {AuthRolePermissionDTOConverter INSTANCE = Mappers.getMapper(AuthRolePermissionDTOConverter.class);// 将DTO转换为BOAuthRolePermissionBO convertDTO2BO(AuthRolePermissionDTO authRolePermissionDTO);// 将BO转换为DTOAuthRolePermissionDTO convertBO2DTO(AuthRolePermissionBO authRolePermissionBO);// 将DTO集合转换为BO集合List<AuthRolePermissionBO> convertDTOList2BOList(List<AuthRolePermissionDTO> authRolePermissionDTOList);// 将BO集合转换为DTO集合List<AuthRolePermissionDTO> convertBOList2DTOList(List<AuthRolePermissionBO> authRolePermissionBOList);}
2.sun-club-auth-domain
1.AuthRolePermissionBO.java
package com.sunxiansheng.auth.domain.entity;import lombok.Data;import java.io.Serializable;/*** 角色权限关联表(AuthRolePermission)实体类** @author makejava* @since 2024-06-07 14:11:29*/
@Data
public class AuthRolePermissionBO implements Serializable {private Long id;/*** 角色id*/private Long roleId;/*** 权限id*/private Long permissionId;private Integer isDeleted;}
2.AuthRolePermissionBOConverter.java
package com.sunxiansheng.auth.domain.convert;import com.sunxiansheng.auth.basic.entity.AuthRolePermission;
import com.sunxiansheng.auth.domain.entity.AuthRolePermissionBO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;import java.util.List;/*** Description: BO转换* @Author sun* @Create 2024/5/24 9:18* @Version 1.0*/
@Mapper // mapstruct的注解
public interface AuthRolePermissionBOConverter {AuthRolePermissionBOConverter INSTANCE = Mappers.getMapper(AuthRolePermissionBOConverter.class);// 将BO转换为EntityAuthRolePermission convertBO2Entity(AuthRolePermissionBO authRolePermissionBO);// 将Entity转换为BOAuthRolePermissionBO convertEntity2BO(AuthRolePermission authRolePermission);// 将BO集合转换为Entity集合List<AuthRolePermission> convertBOList2EntityList(List<AuthRolePermissionBO> authRolePermissionBOList);// 将Entity集合转换为BO集合List<AuthRolePermissionBO> convertEntityList2BOList(List<AuthRolePermission> authRolePermissionList);}
3.sun-club-auth-application-controller
1.AuthRolePermissionDTO.java 新增permissionIdList字段
2.RolePermissionController.java
package com.sunxiansheng.auth.application.controller;import com.alibaba.fastjson.JSON;
import com.google.common.base.Preconditions;
import com.sunxiansheng.auth.application.convert.AuthPermissionDTOConverter;
import com.sunxiansheng.auth.application.convert.AuthRolePermissionDTOConverter;
import com.sunxiansheng.auth.application.dto.AuthPermissionDTO;
import com.sunxiansheng.auth.application.dto.AuthRolePermissionDTO;
import com.sunxiansheng.auth.common.eneity.Result;
import com.sunxiansheng.auth.domain.entity.AuthPermissionBO;
import com.sunxiansheng.auth.domain.entity.AuthRolePermissionBO;
import com.sunxiansheng.auth.domain.service.AuthRolePermissionDomainService;
import com.sunxiansheng.auth.domain.service.impl.AuthRolePermissionDomainServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;/*** Description:* @Author sun* @Create 2024/6/2 17:25* @Version 1.0*/
@RestController
@RequestMapping("/rolePermission/")
@Slf4j
public class RolePermissionController {@Resourceprivate AuthRolePermissionDomainService authRolePermissionDomainService;/*** 新增角色权限信息* @param authRolePermissionDTO* @return*/@RequestMapping("add")public Result<Boolean> add(@RequestBody AuthRolePermissionDTO authRolePermissionDTO) {try {// 日志if (log.isInfoEnabled()) {log.info("RolePermissionController add AuthRolePermissionDTO, authRolePermissionDTO:{}", JSON.toJSONString(authRolePermissionDTO));}// 参数校验Preconditions.checkArgument(!CollectionUtils.isEmpty(authRolePermissionDTO.getPermissionIdList()), "权限ID列表不能为空");Preconditions.checkNotNull(authRolePermissionDTO.getRoleId(), "角色ID不能为空");// 转换DTO为BOAuthRolePermissionBO authRolePermissionBO = AuthRolePermissionDTOConverter.INSTANCE.convertDTO2BO(authRolePermissionDTO);// 调用领域服务// 新增权限信息Boolean res = authRolePermissionDomainService.add(authRolePermissionBO);return Result.ok(res);} catch (Exception e) {// error日志log.error("RolePermissionController add error:{}", e.getMessage(), e);return Result.fail("新增角色权限信息失败");}}}
4.sun-club-auth-domain
1.AuthRolePermissionDomainService.java
package com.sunxiansheng.auth.domain.service;import com.sunxiansheng.auth.domain.entity.AuthRolePermissionBO;/*** Description:* @Author sun* @Create 2024/5/24 9:03* @Version 1.0*/
public interface AuthRolePermissionDomainService {/*** 添加* @param authRolePermissionBO* @return*/Boolean add(AuthRolePermissionBO authRolePermissionBO);
}
2.AuthRolePermissionDomainServiceImpl.java
package com.sunxiansheng.auth.domain.service.impl;import com.sunxiansheng.auth.basic.entity.AuthRolePermission;
import com.sunxiansheng.auth.basic.service.AuthRolePermissionService;
import com.sunxiansheng.auth.common.enums.IsDeleteFlagEnum;
import com.sunxiansheng.auth.domain.convert.AuthRolePermissionBOConverter;
import com.sunxiansheng.auth.domain.entity.AuthRolePermissionBO;
import com.sunxiansheng.auth.domain.service.AuthRolePermissionDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;/*** Description:* @Author sun* @Create 2024/5/24 9:03* @Version 1.0*/
@Service
@Slf4j
public class AuthRolePermissionDomainServiceImpl implements AuthRolePermissionDomainService {@Resourceprivate AuthRolePermissionService authRolePermissionService;@Overridepublic Boolean add(AuthRolePermissionBO authRolePermissionBO) {// BO转换为EntityAuthRolePermission authRolePermission = AuthRolePermissionBOConverter.INSTANCE.convertBO2Entity(authRolePermissionBO);// 得到roleIdLong roleId = authRolePermission.getRoleId();// 构建一个批量插入的列表List<AuthRolePermission> entities = authRolePermissionBO.getPermissionIdList().stream().map(permissionId -> {// 每一个permissionId都构建一个entityAuthRolePermission authRolePermission1 = new AuthRolePermission();authRolePermission1.setRoleId(roleId);authRolePermission1.setPermissionId(permissionId);authRolePermission1.setIsDeleted(IsDeleteFlagEnum.UN_DELETED.getCode());return authRolePermission1;}).collect(Collectors.toList());// 批量插入int count = authRolePermissionService.insertBatch(entities);return count > 0;}
}
3.AuthRolePermissionBO.java 保持跟DTO一致

image-20240607150128258

5.sun-club-auth-infra
1.AuthRolePermissionService.java
/*** 批量新增数据(MyBatis原生foreach方法)* @param entities* @return*/
public int insertBatch(List<AuthRolePermission> entities);
2.AuthRolePermissionServiceImpl.java
/*** 批量新增数据(MyBatis原生foreach方法)** @param entities List<AuthRolePermission> 实例对象列表* @return 影响行数*/
public int insertBatch(List<AuthRolePermission> entities) {return authRolePermissionDao.insertBatch(entities);
}
6.测试
1.接口设计

image-20240607150308702

2.测试

image-20240607150323356

image-20240607150332449

相关文章:

权限模块开发+权限与角色关联(完整CRUD)

文章目录 &#x1f31e; Sun Frame&#xff1a;SpringBoot 的轻量级开发框架&#xff08;个人开源项目推荐&#xff09;&#x1f31f; 亮点功能&#x1f4e6; spring cloud模块概览常用工具 &#x1f517; 更多信息1.easycode生成代码1.配置2.AuthPermissionDao.java剪切到mapp…...

llama神经网络的结构,llama-3-8b.layers=32 llama-3-70b.layers=80; 2000汉字举例说明

目录 llama-3-8b.layers=32 llama-3-70b.layers=80 llama神经网络的结构 Llama神经网络结构示例 示例中的输入输出大小 实际举例说明2000个汉字文本数据集 初始化词嵌入矩阵 1. 输入层 2. 嵌入层 3. 卷积层 4. 全连接层 llama-3-8b.layers=32 llama-3-70b.laye…...

单细胞数据怎么表现genes mRNA表达的热图?

愿武艺晴小朋友一定得每天都开心 #热图 library("ComplexHeatmap") exp <- AverageExpression(subset(fasting_memory, Celltype %in% c("Pre-B")), layer = "data", #即CPM值 features …...

Java聚合快递对接云洋系统小程序源码

&#x1f680;【物流新纪元】聚合快递如何无缝对接云洋系统&#xff0c;效率飙升秘籍大公开&#xff01;✨ &#x1f50d; 开篇揭秘&#xff1a;聚合快递的魅力所在 Hey小伙伴们&#xff0c;你是否还在为多家快递公司账号管理繁琐、订单处理效率低下而头疼&#xff1f;&#…...

MySQL——数据表的基本操作(三)修改数据表

有时候&#xff0c;希望对表中的某些信息进行修改&#xff0c;这时就需要修改数据表。所谓修改数据表指的是修改数据库中已经存在的数据表结构&#xff0c;比如&#xff0c;修改表名、修改字段名、修改字段的数据类型等。在 MySQL中&#xff0c;修改数据表的操作都是使用 ALTER…...

医学图像分割的基准:TransUnet(用于医学图像分割的Transformer编码器)器官分割

1、 TransUnet 介绍 TransUnet是一种用于医学图像分割的深度学习模型。它是基于Transformer模型的图像分割方法&#xff0c;由AI研究公司Hugging Face在2021年提出。 医学图像分割是一项重要的任务&#xff0c;旨在将医学图像中的不同结构和区域分离出来&#xff0c;以便医生可…...

java-swing编写学生成绩查询管理系统

本文是本人大二上实训项目-学生成绩查询管理系统&#xff0c;采用本项目使用Java、MySQL技术。界面框架由Java Swing搭建&#xff0c;用JDBC实现Java与MySQL的连接。 本项目适合初学java和mysql的同学&#xff0c;来做一些小项目来提升自己&#xff0c;因为兴趣所以想要做去尝…...

volatile浅解

volatile修饰的变量有两个特点 线程中修改了自己工作内存中的副本后&#xff0c;立即将其刷新到主内存工作内存中每次读取共享变量时&#xff0c;都会去主内存中重新读取&#xff0c;然后拷贝到工作内存 内存 -> CPU Cache -> CPU 如果没有volatile那么就会继续读取缓存…...

世媒讯带您了解什么是媒体邀约

什么是媒体邀约&#xff1f;其实媒体邀约是一种公关策略&#xff0c;旨在通过邀请媒体记者和编辑参加特定的活动、发布会或其他重要事件&#xff0c;以确保这些活动能够得到广泛的报道和关注。通过这种方式&#xff0c;企业和组织希望能够传达重要信息&#xff0c;提高品牌知名…...

[Kimi 笔记]“面向搜索引擎”

"面向搜索引擎"&#xff08;Search Engine-Oriented&#xff0c;SEO-Oriented 或 SEO-Friendly&#xff09;通常指的是在设计和开发网站时&#xff0c;采取一系列措施来优化网站内容和结构&#xff0c;以便提高网站在搜索引擎结果页面&#xff08;SERP&#xff09;中…...

如何在亚马逊云科技AWS上利用LoRA高效微调AI大模型减少预测偏差

简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 在机器学习和人工智能领域&#xff0c;生成偏差…...

订单定时状态处理业务(SpringTask)

文章目录 概要整体架构流程技术细节小结 概要 订单定时状态处理通常涉及到对订单状态进行定期检查&#xff0c;并根据订单的状态自动执行某些操作&#xff0c;比如关闭未支付的订单、自动确认收货等. 需求分析以及接口设计 需求分析 用户下单后可能存在的情况&#xff1a; …...

STM32 | ADC+RS485(第十天)

点击上方"蓝字"关注我们 01、ADC概述 ADC, Analog-to-Digital Converter的缩写,指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。真实世界的模拟信号.例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的…...

python打包成能够在mac里面运行的程序

要将你的PyQt5应用程序打包成可以在macOS上运行的独立应用程序&#xff0c;可以使用工具如PyInstaller或py2app。下面是使用py2app的详细步骤&#xff0c;因为它是macOS上专用的打包工具&#xff0c;并且更好地支持PyQt5。 1. 安装py2app 首先&#xff0c;确保你的macOS系统上…...

基于FPGA的数字信号处理(20)--半减器和全减器

目录 1、前言 2、半减器 3、全减器 4、减法器 文章总目录点这里&#xff1a;《基于FPGA的数字信号处理》专栏的导航与说明 1、前言 既然有半加器和全加器&#xff0c;那自然也有半减器和全减器了。尽管在电路中减法的实现基本都是 补码 加法 的形式&#xff0c;但是正所谓…...

Python:单引号,双引号,三引号的区别

在Python中&#xff0c;单引号&#xff08;&#xff09;、双引号&#xff08;"&#xff09;和三引号&#xff08; 或 """&#xff09;都可以用来定义字符串&#xff0c;但它们之间有一些区别&#xff1a; 单引号&#xff08;&#xff09;和双引号&#xf…...

电子电气架构 ---SOMEIP/SD初入门

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…...

一些数学基础概念

一些数学基础概念 概率密度函数(PDF) 概率密度函数&#xff08;Probability Density Function&#xff0c;简称 PDF&#xff09;是描述连续随机变量的概率分布的一种函数。它用来表示随机变量在各个取值区间内的概率密度。 1. 定义 对于一个连续随机变量 ( X )&#xff0c;…...

责任有限公司的一般组织结构

责任有限公司&#xff08;有限责任公司&#xff0c;LLC&#xff09;的组织结构通常是为了确保公司运营的有效性和管理的透明度。以下是一般责任有限公司的组织结构及其主要组成部分&#xff1a; 1. 股东&#xff08;Shareholders&#xff09; 职责和角色 所有者&#xff1a;…...

Leetcode3227. 字符串元音游戏

Every day a Leetcode 题目来源&#xff1a;3227. 字符串元音游戏 解法1&#xff1a;博弈论 分类讨论&#xff1a; 如果 s 不包含任何元音&#xff0c;小红输。如果 s 包含奇数个元音&#xff0c;小红可以直接把整个 s 移除&#xff0c;小红赢。如果 s 包含正偶数个元音&am…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...