国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
hibernate調(diào)用存儲(chǔ)過(guò)程及處理返回集合
 

hibernate調(diào)用存儲(chǔ)過(guò)程及處理返回集合

分類: mysql oracle hibernate 862人閱讀 評(píng)論(0) 收藏 舉報(bào)

  項(xiàng)目中用到樹結(jié)構(gòu),一般的需求是點(diǎn)擊一次,請(qǐng)求一次數(shù)據(jù)庫(kù),加載它的子節(jié)點(diǎn),但是現(xiàn)在有個(gè)需要,一次性加載所有節(jié)點(diǎn),這就需要查出節(jié)點(diǎn)的層次level,如果用Oracle數(shù)據(jù)庫(kù),可以用START WITH...CONNECT BY PRIOR子句實(shí)現(xiàn)遞歸查詢,但現(xiàn)在項(xiàng)目中用的是Mysql,ssh框架,苦想了好久,存儲(chǔ)過(guò)程中的查詢是不是也得按照hibernate的要求來(lái)寫,比如說(shuō),查詢實(shí)體類必須用from + 實(shí)體類,但是這個(gè)存儲(chǔ)過(guò)程是用中間表實(shí)現(xiàn)的,中間表是在存儲(chǔ)過(guò)程中創(chuàng)建的,沒(méi)有映射,這下子麻煩了,卡在這里,想了好久,最后還是決定試一試吧,寫完了存儲(chǔ)過(guò)程以后,用hibernate調(diào)用,嘿,成功,功夫不負(fù)有心人,實(shí)踐證明了hibernate調(diào)用存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程中的表不需要映射,直接查即可。

菜單樹結(jié)構(gòu)

BEGIN 
DECLARE _level_var INT; //節(jié)點(diǎn)層次
 
DROP TABLE IF EXISTS temp_child_list; //中間表,其中的字段是程序中需要的字段。
CREATE TABLE temp_child_list ( 
_menuId int,  //菜單id
_menuName varchar(100),
_menuLocType varchar(20),
_level int 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
SET _level_var = 0; 
  INSERT INTO temp_child_list (_menuId,_menuName,_menuLocType,_level) VALUE(rootid,'功能菜單','',_level_var); 
SET _level_var = _level_var + 1; 
INSERT INTO temp_child_list (_menuId,_menuName,_menuLocType,_level) 
SELECT 
menu_id,
menuName, 
menuLocType,
_level_var 
FROM 
ele_sys_menu
WHERE 
parent_id = rootid; 
WHILE ROW_COUNT() > 0 
DO 
SET _level_var = _level_var + 1; 
INSERT INTO temp_child_list SELECT 
a.menu_id,
a.menuName, 
a.menuLocType,
_level_var
FROM 
ele_sys_menu a, 
temp_child_list b 
WHERE 
a.parent_id = b._menuId 
AND b._level = _level_var - 1; 
END WHILE; 
  SELECT tcl._menuId,tcl._menuName,tcl._menuLocType,tcl._level FROM temp_child_list tcl ORDER BY tcl._level; 
  DROP TABLE IF EXISTS temp_child_list; 
END

hibernate調(diào)用

SQLQuery  query = this.getSession().createSQLQuery("{Call getChildMenu(-1)}");

List list = query.list();

返回結(jié)果為list,查出來(lái)很高興,于是接著往下做,強(qiáng)制轉(zhuǎn)換成什么類型呢,到這里又有問(wèn)題了,搜了點(diǎn)資料,發(fā)現(xiàn)需要這么干

public List selectMenuTreeAll() throws Exception  {
        SQLQuery  query = this.getSession().createSQLQuery("{Call getChildMenu(-1)}");
        query.addScalar("_menuId",Hibernate.INTEGER);
        query.addScalar("_menuName",Hibernate.STRING);
        query.addScalar("_menuLocType",Hibernate.STRING);
        query.addScalar("_level",Hibernate.INTEGER);
        List list = query.list();
        List results = new ArrayList();
        System.out.println(list.size()+"kkkkkkkkkkkkkkkk");
        Iterator iterator = list.iterator();
        while(iterator.hasNext()){
            Object[] object = (Object[])iterator.next();
            int menuId = (Integer)object[0];
            System.out.println(menuId);
            String menuName = (String)object[1];
            System.out.println(menuName);
            String menuLocType = (String)object[2];
            System.out.println(menuLocType);
            int level = (Integer)object[3];
            System.out.println(level);
            TempChildList childList = new TempChildList(menuId,menuName,menuLocType,level);
            results.add(childList);
            
        }
        
        return results;

}

ok,搞定,這樣就好了。ok,perfect。

更多0
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
easyUI菜單權(quán)限開發(fā)
經(jīng)典算法題每日演練——第九題 優(yōu)先隊(duì)列
sqlserver如何從存儲(chǔ)過(guò)程獲取結(jié)果集
SQL如何批量修改和刪除存儲(chǔ)過(guò)程
oracle存儲(chǔ)過(guò)程中的事務(wù)
extjs grid 分組來(lái)制作分配權(quán)限窗體界面
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服