权限模块开发+权限与角色关联(完整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…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
前端开发者常用网站
Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...
