【一】day08/23(个人笔记)

可商业权限管理系统:

1.数据结构

Set<Permission> savedPermissions = new LinkedHashSet<>();
LinkedHashSet:不可重复,有序

2.权限管理

@RequestMapping("/load")
@ResponseBody
//不用流的方式
public JsonResult load() {
    List<Permission> permissions = permissionService.listAll();
    Set<Permission> savedPermissions = new LinkedHashSet<>();

    try {
        //1.通过应用程序上下文容器获取所有控制器注解的字节码
        Map<String, Object> beans = ctx.getBeansWithAnnotation(Controller.class);
        //2.获取注解的值
        Collection<Object> coo = beans.values();
        for (Object co : coo) {
            //3.遍历注解中的方法
            for (Method method : co.getClass().getDeclaredMethods()) {
                //4.获取想要注解的注解
                requiredPermission annotation = method.getAnnotation(requiredPermission.class);
                //5.判断,执行业务
                if (annotation != null) {
                    String name = annotation.name();
                    String expression = annotation.expression();
                    Permission permission = new Permission();
                    permission.setName(name);
                    permission.setExpression(expression);
                    if (!permissions.contains(permission)) {
                        savedPermissions.add(permission);
                    }
                }
            }
        }
        permissionService.batchSave(savedPermissions);
    } catch (Exception e) {
        return new JsonResult(false, "加载失败");
    }
    return new JsonResult(true, "加载成功");
}

//用流的方式
    @RequestMapping("/load")
    @ResponseBody
    public JsonResult load() {
        List<Permission> permissions = permissionService.listAll();
        try {
        //获取带注解的bean对象的值并且转成流的形式
            Set<Permission> savedPermissions = ctx.getBeansWithAnnotation(Controller.class).values().stream()
                    .flatMap(controller -> Arrays.stream(controller.getClass().getDeclaredMethods()))
                    //过滤
                    .filter(method -> method.getAnnotation(requiredPermission.class) != null)
                    //转形式(对象)
                    .map(method -> new Permission(method.getAnnotation(requiredPermission.class).name(), method.getAnnotation(requiredPermission.class).expression()))
                    //过滤数据库有的数据
                    .filter(permission -> !permissions.contains(permission))
                    //转成set
                    .collect(Collectors.toSet());
            if (savedPermissions.size() > 0) {
                permissionService.batchSave(savedPermissions);
            }
        } catch (Exception e) {
            return new JsonResult(false, "加载失败");
        }
        return new JsonResult(true, "加载成功");
    }

3.maven中sql循环写法:

<insert id="batchInsert">
    insert into permission (name, expression) values
    <foreach collection="savePermissions" item="p" separator=",">	 // collection:参数名 item:别名	separator:fen'ge
        (#{p.name},#{p.expression})
    </foreach>
</insert>

4.新的 A P I:

Array.Stream()返回的是一个元素序列,且支持顺序和并行的聚合操作。其实我们可以把它理解为包装类

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...