• Java-Code-Tree:TreeService.java


    ylbtech-Java-Code-Tree:TreeService.java
    1.返回顶部
    1、
    package com.sp.manager.util.common.service;
    
    import java.util.List;
    
    import org.springframework.transaction.annotation.Transactional;
    
    import com.sp.manager.util.common.persistence.TreeDao;
    import com.sp.manager.util.common.persistence.TreeEntity;
    import com.sp.manager.util.common.utils.Reflections;
    import com.sp.manager.util.common.utils.StringUtils;
    
    /**
     * Service基类
     * @author
     * @version 2014-05-16
     */
    @Transactional(readOnly = true)
    public abstract class TreeService<D extends TreeDao<T>, T extends TreeEntity<T>> extends CrudService<D, T> {
        
        @Transactional(readOnly = false)
        public void save(T entity) {
            
            @SuppressWarnings("unchecked")
            Class<T> entityClass = Reflections.getClassGenricType(getClass(), 1);
            
            // 如果没有设置父节点,则代表为跟节点,有则获取父节点实体
            if (entity.getParent() == null || StringUtils.isBlank(entity.getParentId()) 
                    || "0".equals(entity.getParentId())){
                entity.setParent(null);
            }else{
                entity.setParent(super.get(entity.getParentId()));
            }
            if (entity.getParent() == null){
                T parentEntity = null;
                try {
                    parentEntity = entityClass.getConstructor(String.class).newInstance("0");
                } catch (Exception e) {
                    throw new ServiceException(e);
                }
                entity.setParent(parentEntity);
                entity.getParent().setParentIds(StringUtils.EMPTY);
            }
            
            // 获取修改前的parentIds,用于更新子节点的parentIds
            String oldParentIds = entity.getParentIds(); 
            
            // 设置新的父节点串
            entity.setParentIds(entity.getParent().getParentIds()+entity.getParent().getId()+",");
            
            // 保存或更新实体
            super.save(entity);
            
            // 更新子节点 parentIds
            T o = null;
            try {
                o = entityClass.newInstance();
            } catch (Exception e) {
                throw new ServiceException(e);
            }
            o.setParentIds("%,"+entity.getId()+",%");
            List<T> list = dao.findByParentIdsLike(o);
            for (T e : list){
                if (e.getParentIds() != null && oldParentIds != null){
                    e.setParentIds(e.getParentIds().replace(oldParentIds, entity.getParentIds()));
                    preUpdateChild(entity, e);
                    dao.updateParentIds(e);
                }
            }
            
        }
        
        /**
         * 预留接口,用户更新子节前调用
         * @param childEntity
         */
        protected void preUpdateChild(T entity, T childEntity) {
            
        }
    
    }
    2、
    2.返回顶部
     
    3.返回顶部
     
    4.返回顶部
     
    5.返回顶部
     
     
    6.返回顶部
     
    warn 作者:ylbtech
    出处:http://ylbtech.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    关于JS中判断两个数组相等
    用JS实现二叉树
    elementUI select组件 默认选择第一项
    angular [src] 绑定url或src 报XSS错误
    easy-mock本地搭建工程实操
    array splice split || string split slice 傻傻分不清楚=>终于弄清楚了
    循环=>轮回=>js循环比拼
    vue-cli 搭建工程配置 => 你想要这里都有
    git分支问题 查看、创建、关联、删除本地/远程分支
    vue知识点 && 错误点 => 持续更新
  • 原文地址:https://www.cnblogs.com/storebook/p/9605628.html
Copyright © 2020-2023  润新知