JAVA+Hibernate 无限级分类

数据库结构:
Create TABLE `admin_menu` (
`menu_id` int(4) NOT NULL auto_increment,
`menu_name` varchar(50) default NULL,
`parent_id` int(4) default '0',
`menu_value` varchar(255) default NULL,
`menu_sort` int(4) default '0',
`menu_description` varchar(50) default NULL,
`isvalid` tinyint(1) default '0',
PRIMARY KEY (`menu_id`)
)

主要看menu_id和parent_id这两个字段。
Eclipse生成的表持久映射:(说明:自己加level属性,作用:为了记录种类所在深度)
public class AdminMenu implements java.io.Serializable { 
    // Fields    
     private Integer menuId;
     private String menuName;
     private Integer parentId;
     private String menuValue;
     private Integer menuSort;
     private String menuDescription;
     private Short isvalid;
     private int level;

// Constructors

/** default constructor */
    public AdminMenu() {
    }

/** minimal constructor */
    public AdminMenu(Integer menuId) {
        this.menuId = menuId;
    }

/** full constructor */
    public AdminMenu(Integer menuId, String menuName, Integer parentId, String menuValue, Integer menuSort, String menuDescription, Short isvalid) {
        this.menuId = menuId;
        this.menuName = menuName;
        this.parentId = parentId;
        this.menuValue = menuValue;
        this.menuSort = menuSort;
        this.menuDescription = menuDescription;
        this.isvalid = isvalid;
    }

// Property accessors

public Integer getMenuId() {
        return this.menuId;
    }

public void setMenuId(Integer menuId) {
        this.menuId = menuId;
    }

public String getMenuName() {
        return this.menuName;
    }

public void setMenuName(String menuName) {
        this.menuName = menuName;
    }

public Integer getParentId() {
        return this.parentId;
    }

public void setParentId(Integer parentId) {
        this.parentId = parentId;
    }

public String getMenuValue() {
        return this.menuValue;
    }

public void setMenuValue(String menuValue) {
        this.menuValue = menuValue;
    }

public Integer getMenuSort() {
        return this.menuSort;
    }

public void setMenuSort(Integer menuSort) {
        this.menuSort = menuSort;
    }

public String getMenuDescription() {
        return this.menuDescription;
    }

public void setMenuDescription(String menuDescription) {
        this.menuDescription = menuDescription;
    }

public Short getIsvalid() {
        return this.isvalid;
    }

public void setIsvalid(Short isvalid) {
        this.isvalid = isvalid;
    }

public int getLevel()
{
   return level;
}

public void setLevel(int level)
{
   this.level = level;
}

}

/**
* 查询管理员菜单

* @return
*/
public static AdminMenu[] selectAdminMenu(String condition)
{
   AdminMenu[] adminMenu = null;
   String hql = "from AdminMenu as am" + condition;
   List list = select(hql);

Object[] o = list.toArray();
   if(o != null)
   {
    adminMenu = new AdminMenu[o.length];
    for(int i = 0; i < o.length; i++)
    {
     adminMenu[i] = (AdminMenu)o[i];
    }
   }
   return adminMenu;
}

/**
* 树的生成(主要用数组进行递归)

* @return
*/
public static ArrayList getTree(AdminMenu[] menu, int parentId, int level, ArrayList list)
{
   for(int i = 0; i < menu.length; i++)
   {
    if(menu[i].getParentId().intValue() == parentId)
    {
     menu[i].setLevel(level);
     list.add(menu[i]);
     getTree(menu, menu[i].getMenuId(), level+1, list);
    }
   }
   return list;
}

(0)

相关推荐

  • 在Java的Hibernate框架中对数据库数据进行查询操作

    Hibernate查询语言(HQL)是一种面向对象的查询语言,类似于SQL,但不是对表和列操作,HQL适用于持久对象和它们的属性. HQL查询由Hibernate转换成传统的SQL查询,这在圈上的数据库执行操作. 虽然可以直接使用SQL语句和Hibernate使用原生SQL,但建议使用HQL尽可能避免数据库可移植性的麻烦,并采取Hibernate的SQL生成和缓存策略的优势. 都像SELECT,FROM和WHERE等关键字不区分大小写,但如表名和列名的属性是区分在HQL敏感. FROM 语句 使

  • java Hibernate延迟加载

    示例数据表:team(班级).certificate(身份证).student(学生)Team.hbm.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hiber

  • java Hibernate 一对多自身关联问题

    Hibernate 一对多自身关联问题 这个很难描述清楚,只能引用CSDN中我提问的帖子了: http://topic.csdn.net/u/20080711/16/7494bf10-48ca-4b2e-8a01-303e647f5516.html 方法,在表单中取得一个PO,然后session.save(po),如下: 程序代码             tx = session.beginTransaction();         session.save(catalog);        

  • java优化hibernate性能的几点建议

    1 <property name="hibernateProperties"> 2 <props> 3 <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop> 4 <prop key="hibernate.show_sql">false</prop> 5 <!-- Create/

  • 浅析java程序中hibernate的应用总结

    我们知道如果用java连接数据库,大量的SQL代码,我们就想通过一种工具来操作数据库,我们首先想到的就是JDBC,但是想更好的针对类的属性进行操作,我们会选择Hibernate. 那么Hibernate 原理是什么呢?hibernate可以理解为是一个中间件它负责把java程序的sql语句接收过来发送到数据库,而数据库返回来的信息hibernate接收之后直接生成一个对象传给java. 一  首先我们先了解一下hibernate的工作7个流程:1.读取并解析配置文件   2.创建SessionF

  • 从最基本的Java工程搭建SpringMVC+SpringDataJPA+Hibernate

    本文会介绍从一个最基本的java工程,到Web工程,到集成Spring.SpringMVC.SpringDataJPA+Hibernate. 平时我们可能是通过一个模板搭建一个工程,或者是直接导入一个项目,而本文选择从最基本的java工程开始,目的是为了展示更多原理. 当然,我们还是从一个最基本的Maven工程开始,其实普通的非Maven工程,搭建过程几乎是一模一样的,只是Jar包需要我们手动的添加到工程中,而Maven工程就只是修改配置文件即可. 下面就正式开始. 1.基于Maven(如果不使

  • java Hibernate多对多映射详解及实例代码

    java Hibernate多对多映射 前言: 一.单向多对多 单向多对多的例子用人和职位来举例,一个人可以有多个职位,一个职位会有多个人.单向多对多是指只能在一端来查询获取另一端的内容.多对多的关系在生成关系模型时会生成对象之前的关联表,关联表中存放着两个关系表的主键,它们的关系如下所示: 代码部分:  (1)映射和关系类 因为是单向的关系,所以只需要在一端进行维护,所以我们需要在User.hbm.xml配置文件中添加<many-to-many>标签,并在标签中加上对应的列关系,在<s

  • 详解Java的Hibernate框架中的缓存与二级缓存

    缓存 今天我们就来讲一下hibernate中实体状态和hibernate缓存.  1)首先我们先来看一下实体状态:  实体状态主要分三种:transient,persitent,detached.  看英文应该就大概明白了吧.  transient:是指数据还没跟数据库中的数据相对应.  persistent:是指数据跟数据库中的数据相对应,它的任何改变都会反映到数据库中.  detached:是指数据跟数据库中的数据相对应,但由于session被关闭,它所做的修改不会对数据库的记录造成影响.

  • 在Java的Hibernate框架中使用SQL语句的简单介绍

    Hibernate中有HQL查询语法.但我们用得比较熟的还是数SQL语句,那么应该怎么来让Hibernate支持SQL呢?这个不用我们去考虑了,Hibernate团队已经早就做好了.        废话不说,直接来例子啦. select * from t_user usr 上面是一条SQL语句,又是废话,是个人都知道.我们想让Hibernate执行这条语句,怎么办呢?看代码: Query query = session.createSQLQuery("select * from t_user u

  • Java的Hibernate框架中用于操作数据库的HQL语句讲解

    上次我们一起学习了用Criteria进行相关的操作,但由于Criteria并不是Hibernate官方推荐的查询方式,我们也并不多用.现在我们来看一下官方推荐的HQL,一起学习一下它的强大.  说是HQL,也就是Hibernate查询语句,和SQL有什么区别呢?一个字母的区别,哈哈.  当然不是这样,HQL和SQL的区别在于思想的不同,HQL是用面向对象的方向进行查询,而SQL则是对数据库二维表进行查询,这里包含的是思想的不同.HQL实际上也是SQL,它由Hibernate帮我们在内部进行转换,

随机推荐