• 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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    一文带你彻底明白如何实现动态添加子节点及修改子节点属性
    一文带你彻底理解 JavaScript 原型对象
    Oracle内存占用高过时的调整策略
    Oracle Instant Client(即时客户端) 安装与配置
    windows环境完全卸载Oracle19c
    Oracle19c常用语句
    cannot mount database in EXCLUSIVE mode解决办法
    oracle存储过程通过游标输出Sql结果集
    Oracle DBlink的创建
    MySQL语法
  • 原文地址:https://www.cnblogs.com/storebook/p/9605628.html
Copyright © 2020-2023  润新知