下面这个方法改为hibernate,有点复杂,求指导。

时间:2022-07-18 14:08:46
一个视频教程,不过他是用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);
}
}

8 个解决方案

#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对象
我这样写调的时候空指针了

#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对象
我这样写调的时候空指针了