SSM分页解决方案-easyui

SSM分页解决方案-easyui

一、mybatis分页插件--Mybatis-PageHelper
1.下载
    https://github.com/pagehelper/Mybatis-PageHelper
2.mybatis中最方便的分页插件,支持单表和多表分页查询。
3.要使用PageHelper,只需要在类路径中包含 pagehelper-xxx.jar 和jsqlparser-0.9.5.jar文件。xxx为最新版本号,到主页查询
4.maven项目的pom.xml中设置
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.0.0</version>
    </dependency>
5.在mybatis的配置文件SqlMapConfig.xml中配置拦截器插件(在配置环境变量前添加)
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!-- 配置支持方法参数,一般用来设置pageSize和pageNum -->
            <property name="supportMethodsArguments" value="true"/>            
        </plugin>
    </plugins>
6.在spring中配置
    <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">        
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <value>    
                            supportMethodsArguments=true
                        </value>
                    </property>
                </bean>
            </array>
        </property>
    </bean>
7.代码分页
    1)接口类中添加方法(对参数使用注解)
        List<Dept> pagedData(@Param("pageSize") int pageSize,@Param("pageNum") int pageNum);
    2)mapper类中
        <select id="pagedData" resultMap="BaseResultMap">
            select * from dept order by deptno
        </select>
    3)Service类中:
        public List<Dept> pagedData(int pageSize, int pageNum) {
        
            return deptService.pagedData(pageSize, pageNum);
        }
    4)控制器类中:
        public String getPagedData(@RequestParam(value="pageNum",defaultValue="1") int pageNum,Model model){
            int pageSize = 3;
            Page<Dept> page = (Page<Dept>)deptService.pagedData(pageSize, pageNum);
            
            model.addAttribute("page", page);
            
            return "dept/getpaged";    
        }
    5)jsp中
        <table class="table table-hover">
            <c:forEach items="${ page }" var="dept">
                <tr>
                    <td>${ dept.deptno }</td>
                    <td>${ dept.dname }</td>
                    <td>${ dept.loc }</td>
                </tr>
            </c:forEach>
        </table>
    6)修改控制器类,得到分页信息
        @RequestMapping("/showpage")
        public String getPaged(@RequestParam(defaultValue="1") int pageNum,Model model){
            int pageSize = 3;
    //        List<Emp> list = empService.getPaged(pageSize, pageNum);
    //        model.addAttribute("list", list);
            
            Page<Emp> list = (Page<Emp>)empService.getPaged(pageSize, pageNum);
            model.addAttribute("list", list);
            model.addAttribute("pageNum", list.getPageNum());//得到页号
            model.addAttribute("pages", list.getPages());//得到总页数
            model.addAttribute("total", list.getTotal());//得到总行数
            return "emp/showpage";
        }
    7)修改jsp页,显示分页信息
        <table border="1" align="center" width="500">
            <c:forEach items="${list }" var="emp">
                <tr>
                    <td>${ emp.empno }</td>
                    <td>${ emp.ename }</td>
                    <td>${ emp.job }</td>
                </tr>
            </c:forEach>
            <tr>
                <td colspan="3">
                    页号:${ pageNum } 总页数:${ pages } 总行数:${ total }
                </td>
            </tr>
        </table>
二、easyui中的datagrid分页
1.导入js和css:
    <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/css/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/css/themes/icon.css">
    <script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.8.0.min.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery.easyui.min.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath }/js/locale/easyui-lang-zh_CN.js"></script>
2.页面中添加表格
    <body>
        <table id="tab3Datagrid">
                                
        </table>
    </body>
3.编写jquery就绪函数:
    $(function(){
    
        $("#tab3Datagrid").datagrid({
            columns:[[
                      {title:"编号",field:"empno",checkbox:true},
                      {title:"姓名",field:"ename"},
                      {title:"工作",field:"job"},
                      {title:"入职日期",field:"hiredate",width:120,
                          //对日期字段进行处理
                          formatter:function(value){
                              var d = new Date(value);
                              return d.Format("yyyy-MM-dd");//調用上面定义的格式化方法
                              
                          }
                         }
                      ]
                      ],
            url:'${pageContext.request.contextPath }/emp/showpage_json.action',
            rownumbers:true,
            singleSelect:true,
            toolbar:[
                     {text:'添加',iconCls:'icon-add',
                         handler:function(){
                             alert('添加');
                         }
                     },
                     {text:'修改',iconCls:'icon-edit'},
                     {text:'删除',iconCls:'icon-remove'}
                     ],
            pagination:true,
            pageList:[5,10,15,20],//设置每页行数列表
            pageSize:5//设置每页行数
        });
});

4.服务器端控制器代码:
    @RequestMapping("/showpage_json")
    @ResponseBody
    public PageResult getPaged_json(int page,int rows){//page为页号,rows为每页行数
        Page<Emp>  pageList = (Page<Emp>)empService.getPaged(rows, page);
        
        PageResult result = new PageResult();
        result.setTotal(pageList.getTotal());
        result.setRows(pageList.getResult());

        return result;
    }
5.修改控制器分页方法实现,这样可以不用在mapper接口中添加分页方法了
    @Service
    public class EmpServiceImpl implements EmpService {
        @Autowired
        private EmpMapper empMapper;

        @Override
        public List<Emp> getPaged(int pageSize, int pageNum) {
            //设置分页信息
            PageHelper.startPage(pageNum, pageSize);
            //执行查询
            EmpExample example = new EmpExample();
            example.setOrderByClause("empno asc");
            List<Emp> list = empMapper.selectByExample(example);        
            
            return list;
        }

    //    @Override
    //    public List<Emp> getPaged(int pageSize, int pageNum) {
    //        
    //        return empMapper.getpaged(pageSize, pageNum);
    //    }

    }
6.easyui中datagrid日期字段格式化
    // 对Date的扩展,将 Date 转化为指定格式的String
    //月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, 
    //年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) 
    //例子: 
    //(new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 
    //(new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18 
    Date.prototype.Format = function (fmt) { //author: meizz 
     var o = {
         "M+": this.getMonth() + 1, //月份 
         "d+": this.getDate(), //日 
         "h+": this.getHours(), //小时 
         "m+": this.getMinutes(), //分 
         "s+": this.getSeconds(), //秒 
         "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
         "S": this.getMilliseconds() //毫秒 
     };
     if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
     for (var k in o)
     if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
     return fmt;
    }
    //调用: var time1 = new Date().Format("yyyy-MM-dd");var time2 = new Date().Format("yyyy-MM-dd HH:mm:ss");

7.删除案例(把对象绑定到复选框上)
  1)业务逻辑层接口方法:
    public int dels(List<Integer> empnos);
  2)业务逻辑层实现类代码:
    @Override
    public int dels(List<Integer> empnos) {
        EmpExample example = new EmpExample();
        example.createCriteria().andEmpnoIn(empnos);
        return empMapper.deleteByExample(example);
    }
  3)控制器代码:
    @RequestMapping("/dels")
    @ResponseBody
    public int dels(String empnos){
        String[] empno = empnos.split(",");
        List<Integer> nos = new ArrayList<Integer>();
        for(int i = 0;i < empno.length;i++){
            nos.add(Integer.parseInt(empno[i]));
        }

        return empService.dels(nos);
    }
   4)jsp页面代码:
    {text:'删除',iconCls:'icon-remove',
         handler:function(){
             //得到所有被选中的josn对象
             var checkedObj =  $("#tab3Datagrid").datagrid("getChecked");
             if(checkedObj.length==0){
                 alert("请选择要删除的员工!");
                 return;
             }
             
             if(!confirm("是否删除选中的员工?")){
                 return;
             }
             var empnos = "";
            
             for(var i = 0;i < checkedObj.length;i++){
                 empnos += checkedObj[i].empno+",";
             }
             empnos = empnos.substring(0, empnos.length-1);
             var url = "${pageContext.request.contextPath }/emp/dels";
             $.post(url,"empnos="+empnos,function(data){
                 if(data == checkedObj.length){
                     for(var i = checkedObj.length - 1;i>=0;i--){
                         //根据对象,得到该对象行的索引号
                         var rowIndex = $("#tab3Datagrid").datagrid("getRowIndex",checkedObj[i]);
                         //根据索引号删除行
                         $("#tab3Datagrid").datagrid("deleteRow",rowIndex);
                     }
                 }else{
                     alert("删除错误!");
                 }
             });
         }
     }
 

源代码地址:https://download.csdn.net/download/pcbhyy/10762442

源代码目录结构说明:
1.lib为mybatis分页插件jar文件
2.ssm_page_demo为使用了mybatis分页插件和bootstrap分页控件的案例
    1)默认使用了ajax得到分页数据
    2)如需修改为同步分页数据,需要修改DeptController中getPagedData方法的返回值为"dept/getpaged"
3.bootstrap-paginator-master.zip为bootstrap分页插件的源码
4.SSM分页解决方案为综合案例的使用说明

    

猜你喜欢

转载自blog.csdn.net/pcbhyy/article/details/83688752