zoukankan      html  css  js  c++  java
  • Easyui的datagrid结合hibernate实现数据分页

    最近在学习easyui的使用,在学到datagrid的时候遇到了一些问题,终于抽点时间整理了一下,分享出来,请各位前辈高手多多指教!

     1、先来看看效果,二话不说,上图直观!

    2、easyui的datagrid的使用方法

    在这里,datagrid的使用我不做过多讲解,俺毕竟是初学者,不敢班门弄斧。所以就简单带一下。

    ①、在easyui的layout中的center中定义一个table,id为"datagridTable"。

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

    ②、使用javascript的方式让这个table变为一个easyui的datagrid。当然也可以给这个table指定class属性为“easyui-datagrid”,两种方式都可以,萝卜白菜,各有所爱。由于datagrid和后台的数据交互打交道的比较多,所以俺使用的功能比较好控制的javascript方式定义。

    代码如下,其中具体的属性和方法请查看easyui文档,官网地址:http://www.jeasyui.com/documentation/datagrid.php,标红的部分为后台struts处理的Url和显示分页工具栏的设置。 

    <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', 
     
                        100 
     
                    } ] ], 
     
                    toolbar : [ { 
     
                        text : '增加', 
     
                        iconCls : 'icon-add', 
     
                        handler : function() { 
     
                        } 
     
                    }, '-', { 
     
                        text : '删除', 
     
                        iconCls : 'icon-remove', 
     
                        handler : function() { 
     
                        } 
     
                    }, '-', { 
     
                        text : '编辑', 
     
                        iconCls : 'icon-edit', 
     
                        handler : function() { 
     
                        } 
     
                    } ] 
     
     
                //两个[],实现多级表头,合并单元格的效果,产生不规则表头   
     
                }); 
     
    }); 

     ③、后台使用的是SSH(struts2+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"; 
     
        } 
     
    } 

    ④、看一眼getUsers(int page,int rows,User u)和getTotal(int 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(); 
     
        } 
     
        */
     
    } 

    ⑤、到此,后台功能开发完成,部署,运行即可。

    page,rows,total参数解释

    如图:

    写下这篇文章,一是为了本着分享精神能与大家共同学习,探讨和进步。二是为了记录一下学习笔记,以备日后只需,查阅方便。不正确指出,望大家多多批评指正。(我的CSDN博客也有这篇文。。(⊙o⊙))

    后续我将把JSONParser的代码分享一下,用于将list转换成标准的json格式。

    本文转自:http://my.oschina.net/sgl/blog/123403

    源码下载地址:https://code.csdn.net/Sgl731524380/easyui-pagination

  • 相关阅读:
    在DevExpress程序中使用SplashScreenManager控件实现启动闪屏和等待信息窗口
    使用Setup Factory安装包制作工具制作安装包
    PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库
    在DevExpress中使用CameraControl控件进行摄像头图像采集
    读取数据库信息构建视图字段的备注信息,方便程序代码生成
    混合框架中Oracle数据库的还原处理操作
    使用图片视频展示插件blueimp Gallery改造网站的视频图片展示
    .NET缓存框架CacheManager在混合式开发框架中的应用(1)-CacheManager的介绍和使用
    在Winform界面菜单中实现动态增加【最近使用的文件】菜单项
    文字处理控件TX Text Control的使用
  • 原文地址:https://www.cnblogs.com/dreammyle/p/4125597.html
Copyright © 2011-2022 走看看