权限模块开发+权限与角色关联(完整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…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
