一个对象在业务逻辑上是一棵树,那它在数据库里就是由若干个表通过外键关联组成的树。
如何从数据库中取出这棵树?
比较优雅的做法是采用先序遍历的办法:先从树根表读出树根,在JAVA世界变成树根Bean,然后用同样的办法读出它的子树,再把子树BEAN设置为树根的属性。
这种做法优雅是优雅,但是速度慢,因为查一次,就要跟数据库服务器连一次,就要增加一次数据库IO。这是不行的。即使用了数据库连接池,开销还是很大
为了减少网络开销,应该先将数据从数据库中一次性取出,然后拿到JAVA世界中进行拆解。这样速度可以明显改善,代价是编程麻烦。 在数据库端要写一个存储过程,先读出树根记录到一个临时表,然后再将子树表逐个与该临时表连接,查出子树记录放入子树临时表,然后再将“孙”树表。。。,最后返回各个临时表的记录集。 在JAVA程序这边,还要用原始的JDBC语句一步一步地处理这种多重结果集,然后又一个一个地拆解