今天遇到一個要產生一個下拉式清單方塊的問題,我的想法是:將資料庫內的所有資料都儲存到一個List裡面,再在前台遍曆整個list。
執行:
水果
→蘋果
→→蘋果系列1
→→蘋果系列2
→→蘋果系列3
→→蘋果系列4
→梨
→桃子
學慣用品
→筆
→→鉛筆
→→鋼筆
→→毛筆
→筆記本
具體問題如下:
所要擷取的資料是在同一個表內,表欄位有 hplb_id hplb_mingcheng hplb_shangjiid
想要解決此類問題,最好的方法,就是利用遞迴。
先說一下,我是利用hibernate來做的資料庫查詢,查詢的表名為:Tb_Huopinleibie,對應的實體類為TbHuopinleibie,還用到一個dao類:HuopinleibieDaoImpl。
//TbHuopinleibie實體類
public class TbHuopinleibie{<br />// Fields<br />@Override<br />public String toString() {<br />return this.hplbMingcheng;<br />}<br />private Integer hplbId;<br />private String hplbMingcheng;<br />private Integer hplbShangjiId;<br />// Constructors<br />/** default constructor */<br />public TbHuopinleibie() {<br />}<br />// Property accessors<br />public Integer getHplbId() {<br />return this.hplbId;<br />}<br />public void setHplbId(Integer hplbId) {<br />this.hplbId = hplbId;<br />}<br />public String getHplbMingcheng() {<br />return this.hplbMingcheng;<br />}<br />public void setHplbMingcheng(String hplbMingcheng) {<br />this.hplbMingcheng = hplbMingcheng;<br />}<br />public Integer getHplbShangjiId() {<br />return this.hplbShangjiId;<br />}<br />public void setHplbShangjiId(Integer hplbShangjiId) {<br />this.hplbShangjiId = hplbShangjiId;<br />}<br />}
//HuopinleibieDaoImpl 完成資料庫的查詢,這裡如果你沒有用hibernate也可以自己封裝這個類,只要能夠完成資料庫的查詢就可以了。
import java.util.*;<br />public class HuopinleibieDaoImpl {<br />public List queryByHQL(String hql) {<br />SessionFactory factory = HibernateUtils.getSessionFactory();<br />Session session = null;<br />Transaction ts = null;<br />List list = null;<br />try {<br />session = factory.openSession();<br />ts = session.beginTransaction();<br />ts.begin();<br />list = session.createQuery(hql).list();<br />ts.commit();<br />} catch (Exception e) {<br />e.printStackTrace();<br />ts.rollback();<br />} finally {<br />HibernateUtils.closeSession(session);<br />}<br />return list;<br />}<br />}
//HibernateUtils hibernate的工具包類。
import org.hibernate.Session;<br />import org.hibernate.SessionFactory;<br />import org.hibernate.cfg.Configuration;<br />public class HibernateUtils {<br />private static SessionFactory factory;</p><p>static {<br />try{<br />Configuration cfg= new Configuration().configure();<br />factory = cfg.buildSessionFactory();<br />}catch(Exception e){<br />e.printStackTrace();<br />}<br />}</p><p>public static SessionFactory getSessionFactory(){<br />return factory;<br />}</p><p>public static Session getSession(){<br />return factory.openSession();</p><p>}</p><p>public static void closeSession(Session session){<br />if (session != null){<br />if(session.isOpen()){<br />session.close();<br />}<br />}<br />}</p><p>}
//下面為一個測試類別。用來測試執行遞迴之後的結果。
import java.util.*;</p><p>import com.sljm.mucai.huopinleibie.dao.HuopinleibieDaoImpl;</p><p>public class CommonUtils {</p><p>private List huopinleibies;</p><p>/**<br /> * 得到貨品類別列表<br /> * @return<br /> */<br />public List listHuopinleibies(int shangji){<br />huopinleibies = new ArrayList();<br />HuopinleibieDaoImpl hplbdi = new HuopinleibieDaoImpl();<br />this.getHuopinleibie(hplbdi,shangji,0);</p><p>return huopinleibies;<br />}<br />/**<br /> * 得到單個的貨品類別<br /> * @param hplbdi HuopinleibieDaoImpl的對象<br /> * @param shangjiId 上級的id號<br /> * @param m 用於產生-->符號<br /> * @return<br /> */<br />public Object getHuopinleibie(HuopinleibieDaoImpl hplbdi,int shangjiId,int m){<br />TbHuopinleibie obj = null;<br />TbHuopinleibie hp = new TbHuopinleibie();<br />List list = new ArrayList();<br />String hql = "from TbHuopinleibie hplb where hplb.hplbShangjiId="+shangjiId;<br />try{<br />System.out.println("hql:"+hql);<br />//每次查詢出上級為shangjiId的貨品類別<br />list = hplbdi.queryByHQL(hql);//(TbHuopinleibie.class, huopin.getHplbId());<br />if(list.size()!=0){<br />for(int i=0;i<list.size();i++){<br />obj = (TbHuopinleibie)list.get(i);<br />String split="";<br />for(int j=0;j<m;j++){<br />split +="→";<br />}<br />obj.setHplbMingcheng(split+obj.getHplbMingcheng());<br />huopinleibies.add(obj);<br />getHuopinleibie(hplbdi,obj.getHplbId(),m+1);</p><p>}<br />}else{<br />//當沒有以shangjiId為id的資料時就把m減少一個,因為在上一次傳遞參數時傳遞的是m+1<br />m--;<br />}<br />}catch(Exception e){<br />e.printStackTrace();<br />}<br />return obj;<br />}</p><p>/**<br /> * @param args<br /> */<br />public static void main(String[] args) {<br />CommonUtils cu = new CommonUtils();<br />HuopinleibieDaoImpl hplbdi = new HuopinleibieDaoImpl();<br />TbHuopinleibie huopin = new TbHuopinleibie();<br />huopin.setHplbShangjiId(0);<br />cu.listHuopinleibies(0);</p><p>for(int i=0;i<cu.huopinleibies.size();i++){<br />System.out.println(cu.huopinleibies.get(i));<br />}<br />}<br />}<br />