权限模块开发+权限与角色关联(完整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 是我个人开源的一款基于 SpringBoot 的轻量级框架,专为中小型企业设计。它提供了一种快速、简单且易于扩展的开发方式。
您的支持是我们持续改进的动力。
🌟 亮点功能
- 组件化开发:灵活选择,简化流程。
- 高性能:通过异步日志和 Redis 缓存提升性能。
- 易扩展:支持多种数据库和消息队列。
📦 spring cloud模块概览
- Nacos 服务:高效的服务注册与发现。
- Feign 远程调用:简化服务间通信。
- 强大网关:路由与限流。
常用工具
- 日志管理:异步处理与链路追踪。
- Redis 集成:支持分布式锁与缓存。
- Swagger 文档:便捷的 API 入口。
- 测试支持:SpringBoot-Test 集成。
- EasyCode:自定义EasyCode模板引擎,一键生成CRUD。
🔗 更多信息
- 开源地址:Gitee Sun Frame
- 详细文档:语雀文档

1.easycode生成代码
1.配置

2.AuthPermissionDao.java剪切到mapper

3.AuthPermission.java使用lombok优化

4.AuthPermissionDao.java 删除Pageable

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


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.接口设计

2.测试


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是关键字

4.测试
1.接口设计

2.测试


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.接口设计

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
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一致

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.接口设计

2.测试


相关文章:
权限模块开发+权限与角色关联(完整CRUD)
文章目录 🌞 Sun Frame:SpringBoot 的轻量级开发框架(个人开源项目推荐)🌟 亮点功能📦 spring cloud模块概览常用工具 🔗 更多信息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聚合快递对接云洋系统小程序源码
🚀【物流新纪元】聚合快递如何无缝对接云洋系统,效率飙升秘籍大公开!✨ 🔍 开篇揭秘:聚合快递的魅力所在 Hey小伙伴们,你是否还在为多家快递公司账号管理繁琐、订单处理效率低下而头疼?&#…...
MySQL——数据表的基本操作(三)修改数据表
有时候,希望对表中的某些信息进行修改,这时就需要修改数据表。所谓修改数据表指的是修改数据库中已经存在的数据表结构,比如,修改表名、修改字段名、修改字段的数据类型等。在 MySQL中,修改数据表的操作都是使用 ALTER…...
医学图像分割的基准:TransUnet(用于医学图像分割的Transformer编码器)器官分割
1、 TransUnet 介绍 TransUnet是一种用于医学图像分割的深度学习模型。它是基于Transformer模型的图像分割方法,由AI研究公司Hugging Face在2021年提出。 医学图像分割是一项重要的任务,旨在将医学图像中的不同结构和区域分离出来,以便医生可…...
java-swing编写学生成绩查询管理系统
本文是本人大二上实训项目-学生成绩查询管理系统,采用本项目使用Java、MySQL技术。界面框架由Java Swing搭建,用JDBC实现Java与MySQL的连接。 本项目适合初学java和mysql的同学,来做一些小项目来提升自己,因为兴趣所以想要做去尝…...
volatile浅解
volatile修饰的变量有两个特点 线程中修改了自己工作内存中的副本后,立即将其刷新到主内存工作内存中每次读取共享变量时,都会去主内存中重新读取,然后拷贝到工作内存 内存 -> CPU Cache -> CPU 如果没有volatile那么就会继续读取缓存…...
世媒讯带您了解什么是媒体邀约
什么是媒体邀约?其实媒体邀约是一种公关策略,旨在通过邀请媒体记者和编辑参加特定的活动、发布会或其他重要事件,以确保这些活动能够得到广泛的报道和关注。通过这种方式,企业和组织希望能够传达重要信息,提高品牌知名…...
[Kimi 笔记]“面向搜索引擎”
"面向搜索引擎"(Search Engine-Oriented,SEO-Oriented 或 SEO-Friendly)通常指的是在设计和开发网站时,采取一系列措施来优化网站内容和结构,以便提高网站在搜索引擎结果页面(SERP)中…...
如何在亚马逊云科技AWS上利用LoRA高效微调AI大模型减少预测偏差
简介: 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践,并应用到自己的日常工作里。 在机器学习和人工智能领域,生成偏差…...
订单定时状态处理业务(SpringTask)
文章目录 概要整体架构流程技术细节小结 概要 订单定时状态处理通常涉及到对订单状态进行定期检查,并根据订单的状态自动执行某些操作,比如关闭未支付的订单、自动确认收货等. 需求分析以及接口设计 需求分析 用户下单后可能存在的情况: …...
STM32 | ADC+RS485(第十天)
点击上方"蓝字"关注我们 01、ADC概述 ADC, Analog-to-Digital Converter的缩写,指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。真实世界的模拟信号.例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的…...
python打包成能够在mac里面运行的程序
要将你的PyQt5应用程序打包成可以在macOS上运行的独立应用程序,可以使用工具如PyInstaller或py2app。下面是使用py2app的详细步骤,因为它是macOS上专用的打包工具,并且更好地支持PyQt5。 1. 安装py2app 首先,确保你的macOS系统上…...
基于FPGA的数字信号处理(20)--半减器和全减器
目录 1、前言 2、半减器 3、全减器 4、减法器 文章总目录点这里:《基于FPGA的数字信号处理》专栏的导航与说明 1、前言 既然有半加器和全加器,那自然也有半减器和全减器了。尽管在电路中减法的实现基本都是 补码 加法 的形式,但是正所谓…...
Python:单引号,双引号,三引号的区别
在Python中,单引号()、双引号(")和三引号( 或 """)都可以用来定义字符串,但它们之间有一些区别: 单引号()和双引号…...
电子电气架构 ---SOMEIP/SD初入门
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…...
一些数学基础概念
一些数学基础概念 概率密度函数(PDF) 概率密度函数(Probability Density Function,简称 PDF)是描述连续随机变量的概率分布的一种函数。它用来表示随机变量在各个取值区间内的概率密度。 1. 定义 对于一个连续随机变量 ( X ),…...
责任有限公司的一般组织结构
责任有限公司(有限责任公司,LLC)的组织结构通常是为了确保公司运营的有效性和管理的透明度。以下是一般责任有限公司的组织结构及其主要组成部分: 1. 股东(Shareholders) 职责和角色 所有者:…...
Leetcode3227. 字符串元音游戏
Every day a Leetcode 题目来源:3227. 字符串元音游戏 解法1:博弈论 分类讨论: 如果 s 不包含任何元音,小红输。如果 s 包含奇数个元音,小红可以直接把整个 s 移除,小红赢。如果 s 包含正偶数个元音&am…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
