美文网首页工作生活
自定义注解@TableTreeParentId、@TableTr

自定义注解@TableTreeParentId、@TableTr

作者: 墨色尘埃 | 来源:发表于2019-07-03 16:37 被阅读0次

    先自定义两个注解:@TableTreeParentId、@TableTreePath


    @TableTreeParentId.png @TableTreePath.png

    实体类中使用

    image.png

    比如新增一个机构:/api/org/insert
    service里重写insert 方法

        @Override
        public boolean insert(T entity) {
            try {
                setPath(entity);
            } catch (IllegalAccessException e) {
                throw new RuntimeException(e);
            }
            return super.insert(entity);
        }
    

    setPath方法

        protected void setPath(T model) throws IllegalAccessException {
            Map<Class, Field> annoFieldMap = getAnnoNameAndValue(model.getClass());
            Field tableTreePathField = annoFieldMap.get(TableTreePath.class);
            Field tableTreeParentIdField = annoFieldMap.get(TableTreeParentId.class);
    
            tableTreePathField.setAccessible(true);
            tableTreeParentIdField.setAccessible(true);
    
    
    
            Serializable parentId = ((Serializable) tableTreeParentIdField.get(model));
    
            if(parentId != null) {
    
                //最顶层 则PATH设置为/
                if (parentId.toString().equals("0") || StringUtils.isEmpty(parentId.toString())) {
                    tableTreePathField.set(model, "/");
                } else {
                    T parent = this.selectById(parentId);
                    String parentPath = tableTreePathField.get(parent).toString();
                    String modelPath = parentPath + parentId.toString() + "/";
                    tableTreePathField.set(model, modelPath);
                }
            }
        }
    

    getAnnoNameAndValue方法
    利用反射机制得到该类的所有属性(private、default、protected、public),java.lang.Class.getAnnotations()方法返回当前这个元素上的所有注释。如果这个元素没有注释,它返回一个长度为零的数组。

        protected Map<Class, Field> getAnnoNameAndValue(Class clazz) {
            Map<Class, Field> result = new HashMap<>();
            for (Field field : clazz.getDeclaredFields()) {
                Annotation[] annotations = field.getAnnotations();
                for (Annotation annotation : annotations) {
                    Class<? extends Annotation> annoClass = annotation.annotationType();
                    result.put(annoClass, field);
                }
            }
            return result;
        }
    

    相关文章

      网友评论

        本文标题:自定义注解@TableTreeParentId、@TableTr

        本文链接:https://www.haomeiwen.com/subject/xtcchctx.html