java实现遍历树形菜单方法——Dao层

简介: java实现遍历树形菜单方法——Dao层

Dao层接口:


/**  
* @Title: IVoteTreeDao.java
* @Package org.dao
* @Description: TODO该方法的主要作用:
* @author A18ccms A18ccms_gmail_com  
* @date 2017-5-6 下午10:38:47
* @version V1.0  
*/
package org.dao;
import java.util.List;
import org.entity.VoteTree;
 /**   
 *    
 * 项目名称:testTree   
 * 类名称:IVoteTreeDao   
 * 类描述:   
 * 创建人:Mu Xiongxiong  
 * 创建时间:2017-5-6 下午10:38:47   
 * 修改人:Mu Xiongxiong   
 * 修改时间:2017-5-6 下午10:38:47   
 * 修改备注:   
 * @version    
 *    
 */
public interface IVoteTreeDao {
  //查询最小的level
  Long minId();
  
  //根据最小的查询所有一级菜单
  List<VoteTree> getFirstLevel(Long minLevel);
  
  //根据pid查询所有相对应的子集
  List<VoteTree> getNextSubSet(VoteTree tvote);
  
  //递归查询
  List<VoteTree> getDeeptLevel(VoteTree tvote);
  
  
}


HibernateBaseDao实现:


/**  
* @Title: BaseHibernateDao.java
* @Package org.dao
* @Description: TODO该方法的主要作用:
* @author A18ccms A18ccms_gmail_com  
* @date 2017-5-6 下午1:50:18
* @version V1.0  
*/
package org.dao;
import org.hibernate.Session;
import org.util.HibernateUtil;
 /**   
 *    
 * 项目名称:votedemo   
 * 类名称:BaseHibernateDao   
 * 类描述:   hibernate的工具类BaseDao
 * 创建人:Mu Xiongxiong  
 * 创建时间:2017-5-6 下午1:50:18   
 * 修改人:Mu Xiongxiong   
 * 修改时间:2017-5-6 下午1:50:18   
 * 修改备注:   
 * @version    
 *    
 */
public class BaseHibernateDao {
  
  
  /**
   * 
  * @Title: getSession
  * @Description: 该方法的主要作用:打开session 
  * @param  @return 设定文件  
  * @return  返回类型:Session   
  * @throws
   */
  public Session getSession(){
    return HibernateUtil.getSession();
  }
  
  /**
   * 
  * @Title: closeSession
  * @Description: 该方法的主要作用:关闭session 
  * @param   设定文件  
  * @return  返回类型:void   
  * @throws
   */
  public void closeSession (){
    HibernateUtil.closeSession();
  }
  
}


Dao层实现类:

/**  
* @Title: IVoteTreeDaoImpl.java
* @Package org.dao.impl
* @Description: TODO该方法的主要作用:
* @author A18ccms A18ccms_gmail_com  
* @date 2017-5-6 下午10:40:25
* @version V1.0  
*/
package org.dao.impl;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.criteria.From;
import org.dao.BaseHibernateDao;
import org.dao.IVoteTreeDao;
import org.entity.VoteTree;
 /**   
 *    
 * 项目名称:testTree   
 * 类名称:IVoteTreeDaoImpl   
 * 类描述:   
 * 创建人:Mu Xiongxiong  
 * 创建时间:2017-5-6 下午10:40:25   
 * 修改人:Mu Xiongxiong   
 * 修改时间:2017-5-6 下午10:40:25   
 * 修改备注:   
 * @version    
 *    
 */
public class IVoteTreeDaoImpl extends BaseHibernateDao implements IVoteTreeDao {
  //
  
  //查询最小的数
  @Override
  public Long minId() {
    String hql = "select min(levels) from VoteTree";
    Long minCount = (Long) getSession().createQuery(hql).uniqueResult(); 
    System.out.println("最小的数是:"+minCount);
    return minCount;
  }
  //查询一级菜单
  @Override
  public List<VoteTree> getFirstLevel(Long minLevel) {
    String hql="from VoteTree where levels=?";
    List<VoteTree> listFirstLevel = getSession().createQuery(hql)
                          .setParameter(0, minLevel)
                          .list();
    return listFirstLevel;
  }
  //根据一级id查询所有的子集
  @Override
  public List<VoteTree> getNextSubSet(VoteTree tvote) {
    String hql = "from VoteTree where pid = ?";
    List<VoteTree> tNextLevel = getSession().createQuery(hql).setParameter(0, tvote.getId()).list();
    
    //遍历这个二级目录的集合
    for (VoteTree voteTree : tNextLevel) {
      List<VoteTree> ts = getDeeptLevel(voteTree);
      //将下面的子集都依次递归进来
      voteTree.setChildren(ts);
    }
    return tNextLevel;
  }
  //递归查询
  @Override 
  public List<VoteTree> getDeeptLevel(VoteTree tvote) {
    String hql="from VoteTree where pid = ?";
    List<VoteTree> tsLevel = getSession().createQuery(hql).setParameter(0, tvote.getId()).list();
    if(tsLevel.size()>0){
      for (int i = 0; i <tsLevel.size(); i++) {
        getDeeptLevel(tsLevel.get(i));
      }
    }
    return tsLevel;
  }
}




相关文章
|
5天前
|
Java API
java.time常用方法汇总
`java.time` API 是从 Java 8 开始引入的时间日期处理库,旨在替代老旧的 `java.util.Date` 和 `Calendar`。它提供了更简洁、强大和灵活的方式处理日期、时间、时区及时间间隔,支持全球化和时间计算需求。API 包含获取当前时间、创建指定时间、解析和格式化字符串、进行加减运算、比较时间、获取年月日时分秒、计算时间间隔、时区转换以及判断闰年等功能。示例代码展示了如何使用这些功能,极大简化了开发中的时间处理任务。
|
5天前
|
存储 安全 算法
Java容器及其常用方法汇总
Java Collections框架提供了丰富的接口和实现类,用于管理和操作集合数据。
Java容器及其常用方法汇总
|
7天前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
31 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
24天前
|
Java 程序员 调度
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
55 9
|
28天前
|
Java
Java快速入门之类、对象、方法
本文简要介绍了Java快速入门中的类、对象和方法。首先,解释了类和对象的概念,类是对象的抽象,对象是类的具体实例。接着,阐述了类的定义和组成,包括属性和行为,并展示了如何创建和使用对象。然后,讨论了成员变量与局部变量的区别,强调了封装的重要性,通过`private`关键字隐藏数据并提供`get/set`方法访问。最后,介绍了构造方法的定义和重载,以及标准类的制作规范,帮助初学者理解如何构建完整的Java类。
|
8月前
|
安全 Java 编译器
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
61 1
|
9月前
|
存储 Java
Java数组与带参数方法:定义、调用及实践
Java数组与带参数方法:定义、调用及实践
92 1
|
9月前
|
存储 Java
Java中带返回值方法的定义与调用技术
Java中带返回值方法的定义与调用技术
128 1
|
9月前
|
Java
Java一分钟之-方法定义与调用基础
【5月更文挑战第8天】本文介绍了Java编程中的方法定义和调用,包括基本结构、常见问题和避免策略。方法定义涉及返回类型、参数列表和方法体,易错点有返回类型不匹配、参数错误和忘记返回值。在方法调用时,要注意参数传递、静态与非静态方法的区分,以及重载方法的调用。避免错误的策略包括明确返回类型、参数校验、理解值传递、区分静态和非静态方法以及合理利用重载。通过学习和实践,可以提升编写清晰、可维护代码的能力。
282 0
|
9月前
|
Java 编译器
探究Java【方法的定义及使用】----【简单面试题】
探究Java【方法的定义及使用】----【简单面试题】
74 2