Easyui的datagrid結合hibernate實現數據分頁

最近在學習easyui的使用,在學到datagrid的時候遇到了一些問題,終於抽點時間整理了一下,分享出來,請各位前輩高手多多指教! javascript

 1、先來看看效果,二話不說,上圖直觀! php

2easyuidatagrid的使用方法 html

在這裏,datagrid的使用我不作過多講解,俺畢竟是初學者,不敢班門弄斧。因此就簡單帶一下。 java

、在easyuilayout中的center中定義一個tableiddatagridTable spring

<div region="center" border="false"> 
                    <table id="datagridTable"></table> 
                </div>

、使用javascript的方式讓這個table變爲一個easyuidatagrid。固然也能夠給這個table指定class屬性爲easyui-datagrid,兩種方式均可以,蘿蔔白菜,各有所愛。因爲datagrid和後臺的數據交互打交道的比較多,因此俺使用的功能比較好控制的javascript方式定義。 json

代碼以下,其中具體的屬性和方法請查看easyui文檔,官網地址:http://www.jeasyui.com/documentation/datagrid.php,標紅的部分爲後臺struts處理的Url和顯示分頁工具欄的設置。  session

<script type="text/javascript"> 

        $(function() { 

            $("#datagridTable").datagrid({ 

                url : 'getUsers', 

                title : '用戶列表', 

                pagination : true, 

                pageSize : 10, 

                pageList : [ 10, 20, 30, 40 ], 

                fit : true,//自適應窗口大小變化 

                fitColumns : true, 

                border : false, 

                idField : 'id', 

                columns : [ [ { 

                    title : '用戶編號', 

                    field : 'id', 

                    width : 100 

                //寬度必須,數值隨便 

                }, { 

                    title : '用戶名', 

                    field : 'username', 

                    width : 100 

                }, { 

                    title : '用戶密碼', 

                    field : 'password', 

                    width : 100 

                },{ 

                    title:'註冊時間', 

                    field:'date', 

                    width:100 

                } ] ], 

                toolbar : [ { 

                    text : '增長', 

                    iconCls : 'icon-add', 

                    handler : function() { 

                    } 

                }, '-', { 

                    text : '刪除', 

                    iconCls : 'icon-remove', 

                    handler : function() { 

                    } 

                }, '-', { 

                    text : '編輯', 

                    iconCls : 'icon-edit', 

                    handler : function() { 

                    } 

                } ] 


            //兩個[],實現多級表頭,合併單元格的效果,產生不規則表頭   

            }); 

});

 ③、後臺使用的是SSHstruts2+hibernate4+spring3.2),後臺Action簡單寫了一下。
@Controller(value = "GetUserAction") 

@Scope("prototype") 

public class GetUserAction { 

    //使用spring的annotation注入 

    @Resource(name = "userDao") 

    private UserDao ud; 

    //page和rows屬性,是easyui分頁工具的屬性,名字固定,便於struts2的自動封裝和類型裝換,能夠經過Firebug看到。 

    private int page; 

    private int rows; 

  

    //省略的set/get方法 


    public String getUsers() { 

        //存放數據的list 

        List<User> users = new ArrayList<User>(); 

        //這個User是後來作數據過濾的時候封裝的過濾條件。 

        User u =new User(); 

        //使用spring的BeanUtils工具,複製屬性到u裏面。 

        BeanUtils.copyProperties(this, u); 

        //後臺的getUsers方法,這裏我省略了service層,採用domain,action,dao,daoImpl架構,功能簡單,就沒加上service這一層。 

        users = (List<User>) ud.getUsers(page, rows, u); 

         

        Map<String, Object> m = new HashMap<String, Object>(); 

        //total是easyui分頁工具的總頁數。名字固定。 

      m.put("total", ud.getTotal(page, rows, u)); 

        m.put("rows", users); 

        //本身寫了一個java對象轉換成json的工具類,俺用的是jackson,使用json-lib的同窗能夠本身寫一個。不過jaon-lib的轉換速度比較慢,沒有jackson快。 

        JSONParser.writeJson(m); 

        return "success"; 

    } 

}

 

  ④、看一眼getUsersint page,int rows,User u)和getTotalint page,int rows,User u)方法 架構

@Service("userDao") 

public class UserDaoImpl implements UserDao { 

     

    //注入hibernate的sessionFactory,很少說。 

    @Resource(name = "sessionFactory") 

    private SessionFactory sessionFactory; 


    //過濾條件,動態拼接HQL語句。 

    public String addWhere(String hql, User u) { 


        if (u.getUsername() != null && !u.getUsername().trim().equals("")) { 

            hql += " where 1=1 and u.username like '%%" + u.getUsername() 

                    + "%%'"; 

        } 

        return hql; 

    }; 

    //設置爲只讀事務 

    @Override 

    @Transactional(readOnly = true) 

    public List<?> getUsers(int page, int rows, User u) { 


        String hql = "from User u "; 

        hql = addWhere(hql, u); 

        Query query = sessionFactory.getCurrentSession().createQuery(hql); 

         

       //hibernate的分頁就依靠這兩個set方法,詳情請查看API文檔。 

        query.setFirstResult((page - 1) * rows); 

        query.setMaxResults(rows); 

        //將結果以list返回。 

        return query.list(); 


    } 

    //getTotal方法第一種寫法,使用HQL的count函數 

    @Override 

    @Transactional(readOnly = true) 

    public Long getTotal(int page, int rows, User u) { 


        String hql="   select count(*) from  User u"; 

        hql=addWhere(hql, u); 


        Query query = sessionFactory.getCurrentSession().createQuery(hql); 

        //注意類型爲Long。 

        return (Long) query.list().get(0); 

    } 

    /** 

    //getTotal方法的第二種寫法,不使用HQL的count函數。 

    @Override 

    @Transactional(readOnly = true) 

    public  List<?> getTotal(int page, int rows, User u) { 

        //不適用count,查詢全部的,action經過ud.getUsers(page,rows,u).size()得到total。性能較差,畢竟我只要一個 

        //count數值,hibernate卻list全部的以後在求size()。 

       String hql=" from  User u"; 

      

        hql=addWhere(hql, u); 


        Query query = sessionFactory.getCurrentSession().createQuery(hql); 


        return query.list(); 

    } 

    */ 

}


  ⑤、到此,後臺功能開發完成,部署,運行便可。 dom

  pagerowstotal參數解釋 ide

   如圖:

   



寫下這篇文章,一是爲了本着分享精神能與你們共同窗習,探討和進步。二是爲了記錄一下學習筆記,以備往後只需,查閱方便。不正確指出,望你們多多批評指正。(個人CSDN博客也有這篇文。。(⊙o⊙))

後續我將把JSONParser的代碼分享一下,用於將list轉換成標準的json格式。

相關文章
相關標籤/搜索