一个视频教程,不过他是用JDBC写的。不知道能不能继承HibernateDaoSupport来写得简单些。
还望高人来指导下。一个递归读取分销商树的方法,麻烦了麻烦了
private void readClientTree(Connection conn, int id, int level) 
throws SQLException {
String sql = "select * from t_client where pid=?";
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, id);
rs = pstmt.executeQuery();
while (rs.next()) {
sbTreeHTML.append("<div>");
sbTreeHTML.append("\n");
for (int i=0; i<level; i++) {
sbTreeHTML.append("<img src=\"../images/white.gif\">");
sbTreeHTML.append("\n");
}
//if ("N".equals(rs.getString("is_leaf"))) {
if (Constants.NO.equals(rs.getString("is_leaf"))) {
sbTreeHTML.append("<img alt=\"展开\" style=\"cursor:hand;\" onClick=\"display('" + rs.getInt("id") + "');\" id=\"img" + rs.getInt("id") + "\" src=\"../images/plus.gif\">");
sbTreeHTML.append("\n");
sbTreeHTML.append("<img id=\"im" + rs.getInt("id") + "\" src=\"../images/closedfold.gif\">");
sbTreeHTML.append("\n");
sbTreeHTML.append("<a href=\"client_node_crud.jsp?id=" + rs.getInt("id") + "\" target=\"clientDispAreaFrame\">" + rs.getString("name") + "</a>");
sbTreeHTML.append("\n");
sbTreeHTML.append("<div style=\"display:none;\" id=\"div" + rs.getInt("id") + "\">");
sbTreeHTML.append("\n");
readClientTree(conn, rs.getInt("id"), level + 1);
sbTreeHTML.append("</div>");
sbTreeHTML.append("\n");
}else {
sbTreeHTML.append("<img src=\"../images/minus.gif\">");
sbTreeHTML.append("\n");
sbTreeHTML.append("<img src=\"../images/openfold.gif\">");
sbTreeHTML.append("\n");
//if ("Y1".equals(rs.getString("is_client"))) {
if (Constants.YES.equals(rs.getString("is_client"))) {
sbTreeHTML.append("<a href=\"client_crud.jsp?id=" + rs.getInt("id") + "\" target=\"clientDispAreaFrame\">" + rs.getString("name") +  "</a>");
}else {
sbTreeHTML.append("<a href=\"client_node_crud.jsp?id=" + rs.getInt("id") + "\" target=\"clientDispAreaFrame\">" + rs.getString("name") + "</a>");
}
sbTreeHTML.append("\n");
}
sbTreeHTML.append("</div>");
sbTreeHTML.append("\n");
}
}finally {
DbUtil.close(rs);
DbUtil.close(pstmt);
}
}

解决方案 »

  1.   

    因为加入了 HTML标记 自己改了改了乱了……
      

  2.   

    hibernate只是操作数据库简单而已,如果楼主是想让代码简单些,就用struts2吧,看你写那么多html哥蛋疼了
      

  3.   

    直接将idBc换成hibernate就可以了  写相应的映射 配置文件
      

  4.   

    分层,你hibernate后台dao层写个方法,根据pid去查询t_client信息
    然后在service层写个方法
    private void readClientTree(int id, int level) {
    //加载client信息
       Client  c=ClientDAO.findByPid(id);
    //下面的代码直接把那一堆拷过来,rs.getXXX("X")换成c.getX()就行啦
    }
      

  5.   

    对了 pid不是主键 
    是的 4L 我的想法和你的差不多
    实现的时候 还有点问题 我再研究研究
      

  6.   

    用个s2sh框架 ,给整合了。 把我看的头大了
      

  7.   

    原来的是一个 while循环
    改了以后 怎么实现?
      

  8.   

    我写了一下 各种空指针啊 帮忙看看
    /**
     * 读取树
     * 
     * @param id
     * @param level
     */
    public void readTree(final int id, int level) { List returnList = this.getHibernateTemplate().executeFind(
    new HibernateCallback() { public Object doInHibernate(Session session)
    throws HibernateException, SQLException {
    Query query = session
    .createQuery("select * from t_client where pid=?");
    query.setParameter(0, id);
    return query.list();
    } });
    for (Object object : returnList) {
    System.out.println(object);
    }
    }
    里面的t_client 对应Client对象
    我这样写调的时候空指针了