zoukankan      html  css  js  c++  java
  • 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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    .Net -- NLog日志框架配置与使用
    Prism -- 简介
    Prism.WPF -- Prism框架使用(下)
    Prism.WPF -- Prism框架使用(上)
    Win32Api -- 关闭当前应用
    WPF -- 一种圆形识别方案
    C#语言特性及发展史
    WPF -- 一种实现本地化的方法
    DEV中右键菜单如何只在非空单元格上显示?
    打开一个窗体,其他窗体处于不可编辑状态
  • 原文地址:https://www.cnblogs.com/storebook/p/9605628.html
Copyright © 2011-2022 走看看