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 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
33 3
|
2天前
|
Java
Java 与垃圾回收有关的方法
Java 与垃圾回收有关的方法
|
3天前
|
存储 Java 测试技术
一文搞清楚Java中的方法、常量、变量、参数
在JVM的运转中,承载的是数据,而数据的一种变现形式就是“量”,量分为:**常量与变量**,我们在数学和物理学中已经接触过变量的概念了,在Java中的变量就是在程序运行过程中可以改变其值的量。
14 0
|
7天前
|
存储 Java
Java动态转发代理IP的实现方法
Java动态转发代理IP的实现方法
23 11
|
9天前
|
Java
Java接口中可以定义哪些方法?
【4月更文挑战第13天】
14 0
Java接口中可以定义哪些方法?
|
7月前
|
Java
JAVA方法的定义
JAVA方法的定义
36 0
|
2月前
|
Java 编译器
探究Java【方法的定义及使用】----【简单面试题】
探究Java【方法的定义及使用】----【简单面试题】
30 2
|
4月前
|
Java Go
【Java 泛型方法】泛型方法的定义和使用,泛型的通配符和泛型的上下限,泛型的注意事项
【Java 泛型方法】泛型方法的定义和使用,泛型的通配符和泛型的上下限,泛型的注意事项
|
4月前
|
Java 编译器
【Java 抽象类&抽象方法】什么是抽象类&方法,如何定义,起什么作用?
【Java 抽象类&抽象方法】什么是抽象类&方法,如何定义,起什么作用?
【Java|基础篇】方法的定义使用、重载以及递归
方法就是组织好的,可重复使用的具有某种功能的特定代码块 (类似于函数)。在我们平时写代码时,如果遇到会经常使用的一些功能相同的代码时,我们就可以把这段代码写成一个方法,下次使用时直接调用方法即可.就不需要每次使用都要重新写一遍这些代码了。