微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【一】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()返回的是一个元素序列,且支持顺序和并行的聚合操作。其实我们可以把它理解为包装类

原文地址:https://www.jb51.cc/wenti/3287883.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐