• Mybatis分页查询


    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过。如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/mao2080/

    1、View层代码

    以js为例,主要是参数传递,查询条件必须以search_打头

    /**
     * Ajax请求
     * params url 请求的url
     * params params 参数(json类型,如:{userName:'admin', email:'mao2080@sina.com'})
     * params successCallBack 自定义函数-成功时返回
     * params errorCallBack 自定义函数-失败时返回
     */
    var ajaxRequest = function(url, params, successCallBack, errorCallBack){
        $.ajax({
            url:url,
            data:params,
            type:"post",
            dataType:"json",
            async:true,
            success:function(res){
                if(res.success || res.code == 200){
                    successCallBack(res);
                }else{
                    errorCallBack(res);
                }
            },
            error:function(res){
                alert("请求失败...");
            },
        });
    };
    
    ajaxRequest("dbController/queryUserList", {
            search_currPage:1,
            search_pageSize:2,
            search_id:"6",
            search_name:"2",
        }, function(res) {
        //do something
        }
    }

    2、Controller层代码

    //注意要继承BaseController
    @Controller
    @RequestMapping("/dbController")
    public class DBController {
    
        @Autowired
        private CommonService commonService;
    
        @RequestMapping("/queryUserList")
        @ResponseBody
        public ResObject queryUserList(HttpServletRequest request) {
            try {
                Pagenation data = this.commonService.queryUserList(this.getParameters(request));
                return new ResObject(data);
            } catch (Exception e) {
                loger.error(e);
                return new ResObject(201, "查询失败";
            }
        }
    
      /**
         * 
         * 描述:获取分页参数
         * @author mao2080@sina.com
         * @created 2017年4月18日 下午4:24:34
         * @since 
         * @param request
         * @return
         */
        protected Map<String, String> getParameters(HttpServletRequest request){
            Map<String, String> paramsMap = new HashMap<String, String>(); 
            Enumeration<?> paramNames = request.getParameterNames();
            while (paramNames.hasMoreElements()) {
                String paramName = (String) paramNames.nextElement();
                if(StringUtils.isBlank(paramName)){
                    continue;
                }
                if(paramName.startsWith(SystemConstants.SEARCH_WORD)){
                    String[] paramValues = request.getParameterValues(paramName);
                    if(paramValues.length == 1) {
                        paramsMap.put(paramName, paramValues[0]);
                    }else{
                        paramsMap.put(paramName, "");
                    }
                }
            }
            return paramsMap;
        }
    }

    3、Service层接口及实现

    /**
     * 
     * 项目名称:---
     * 模块名称:用户模块
     * 功能描述:
     * 创建人: mao2080@sina.com
     * 创建时间: 2017年1月18日 下午6:40:24
     * 修改人: mao2080@sina.com
     * 修改时间: 2017年1月18日 下午6:40:24
     */
    public interface CommonService {
        /**
        * 
        * 描述:分页查询
        * @author mao2080@sina.com
        * @created 2017年4月18日 下午4:57:13
        * @since 
        * @param paramsMap 查询条件
        * @return Pagenation
        */
        public Pagenation queryUserList(Map<String, String> paramsMap);
    }
    /** * * 项目名称:--- * 模块名称:用户模块 * 功能描述:测试模块实现类 * 创建人: mao2080@sina.com * 创建时间: 2017年1月18日 下午6:44:18 * 修改人: mao2080@sina.com * 修改时间: 2017年1月18日 下午6:44:18 */ @Service("commonService") public class CommonServiceImpl implements CommonService { @Autowired private CommonMapper commMapper; /** * * 描述:获取列表 * @author mao2080@sina.com * @created 2017年4月1日 上午10:27:47 * @since * @return Pagenation*/ @Override public Pagenation queryUserList(Map<String, String> paramsMap){ Pagenation page = new Pagenation(paramsMap); page.setRecordTotal(this.commMapper.queryCount(paramsMap)); page.setList(this.commMapper.queryUserList(paramsMap)); return page; }
    }
    /** * * 项目名称:--- * 模块名称:公共模块 * 功能描述:oracle CRUD例子 * 创建人: mao2080@sina.com * 创建时间:2017年4月1日 上午10:40:33 * 修改人: mao2080@sina.com * 修改时间:2017年4月1日 上午10:40:33 */ public interface CommonMapper { /** * * 描述:查询列表 * @author mao2080@sina.com * @created 2017年4月1日 上午10:40:27 * @since * @return user列表 */ public List<User> queryUserList(Map<String, String> paramsMap);
    }

    4、Mapper.xml配置文件

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
     3 <mapper namespace="com.common.mapper.ormapper.CommonMapper" >
     4   <!-- 用户分页查询-条件拼接 -->
     5   <sql id="query_user_where">
     6       <where>
     7           <if test="search_id != null"> id like '%'||#{search_id,jdbcType=VARCHAR}||'%'</if>
     8           <if test="search_name != null"> and name = #{search_name,jdbcType=VARCHAR}</if>
     9       </where>
    10   </sql>
    11   <!-- 用户分页查询-查询条数 -->
    12   <select id="queryCount" resultType="Integer" parameterType="Map">
    13            select count(1) from test
    14            <include refid="query_user_where"/>
    15   </select>
    16   <!-- 用户分页查询-查询记录 -->
    17   <select id="queryUserList" parameterType="Map" resultType="com.common.entity.User">
    18         ${PAGE_SQL_STA}
    19         select * from test
    20         <include refid="query_user_where"/>
    21         ${PAGE_SQL_END}
    22   </select>
    23 </mapper>

    5、Pagenation对象

    package com.common.entity;
    
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.Map;
    
    /**
     * 
     * 项目名称:---
     * 模块名称:常用工具
     * 功能描述:分页对象
     * 创建人: mao2080@sina.com
     * 创建时间:2017年4月18日 下午4:02:27
     * 修改人: mao2080@sina.com
     * 修改时间:2017年4月18日 下午4:02:27
     */
    public class Pagenation implements Serializable {
    
        /**序列*/
        private static final long serialVersionUID = 4542617637761955078L;
    
        /**当前页*/
        private int currPage = 1;
        
        /**每页大小*/
        private int pageSize = 10;
        
        /**总页数*/
        private int pageTotal;
        
        /**总条数*/
        private int recordTotal = 0;
        
        /**前一页*/
        private int prevPage;
        
        /**下一页*/
        private int nextPage;
        
        /**第一页*/
        private int firstPage = 1;
        
        /**最后一页*/
        private int lastPage;
        
        /**每页的内容*/
        private Object list;
        
        /**
         * 
         * 描述:构造函数
         * @author mao2080@sina.com
         * @created 2017年4月18日 下午3:57:01
         * @since
         */
        public Pagenation() {
            super();
        }
    
        /**
         * 
         * 描述:构造函数
         * @author mao2080@sina.com
         * @created 2017年4月18日 下午3:56:57
         * @since 
         * @param currentPage 当前页
         * @param pageSize 每页大小
         */
        public Pagenation(int currPage, int pageSize) {
            super();
            this.currPage = currPage;
            this.pageSize = pageSize;
        }
        
        /**
         * 
         * 描述:构造函数
         * @author mao2080@sina.com
         * @created 2017年4月18日 下午7:52:27
         * @since 
         * @param paramsMap 条件
         * @throws BusinessException 
         */
        public Pagenation(Map<String, String> paramsMap) {
            super();
            this.currPage = Pagenation.toInteger(paramsMap.get("search_currPage"), 1);
            this.pageSize = Pagenation.toInteger(paramsMap.get("search_pageSize"), this.pageSize);
            paramsMap.put("PAGE_SQL_STA", "select * from ( select temp_.*, rownum rn from (");
            paramsMap.put("PAGE_SQL_END", ") temp_ where rownum<="+this.currPage*this.pageSize+") where rn>"+(this.currPage-1)*this.pageSize);
        }
    
        /**
         * 
         * 描述:设置总条数,默认为0
         * @author mao2080@sina.com
         * @created 2017年4月18日 下午3:50:28
         * @since 
         * @param recordTotal
         */
        public void setRecordTotal(int recordTotal) {
            this.recordTotal = recordTotal;
            this.calculate();
        }
    
        /**
         * 
         * 描述:设置分页内容
         * @author mao2080@sina.com
         * @created 2017年4月18日 下午3:50:09
         * @since 
         * @param list 内容
         */
        public void setList(Object list) {
            this.list = list == null?new ArrayList<Object>():list;
        }
    
        /**
         * 
         * 描述:设置其他参数
         * @author mao2080@sina.com
         * @created 2017年4月18日 下午3:53:54
         * @since
         */
        public void calculate() {
            this.pageTotal = this.recordTotal % this.pageSize > 0 ? this.recordTotal / this.pageSize + 1 : this.recordTotal / this.pageSize;
            this.firstPage = 1;
            this.lastPage = this.pageTotal;
            if (this.currPage > 1) {
                this.prevPage = this.currPage - 1;
            } else {
                this.prevPage = this.firstPage;
            }
            if (this.currPage < this.lastPage) {
                this.nextPage = this.currPage + 1;
            } else {
                this.nextPage = this.lastPage;
            }
        }
    
        public int getCurrPage() {
            return currPage;
        }
    
        public int getPageSize() {
            return pageSize;
        }
    
        public int getPageTotal() {
            return pageTotal;
        }
    
        public int getRecordTotal() {
            return recordTotal;
        }
    
        public int getPrevPage() {
            return prevPage;
        }
    
        public int getNextPage() {
            return nextPage;
        }
    
        public int getFirstPage() {
            return firstPage;
        }
    
        public int getLastPage() {
            return lastPage;
        }
    
        public Object getList() {
            return list;
        }
        
        /**
         * 
         * 描述:转Integer(用于不严格转换,比如接收可以默认为空的参数)
         * @author mao2080@sina.com
         * @created 2017年4月18日 下午4:46:20
         * @since 
         * @param object 要转的对象
         * @param defaultVal 默认值
         * @return
         */
        public static Integer toInteger(Object object, Integer defaultVal){
            try {
                return Integer.valueOf(object.toString());
            } catch (Exception e) {
                return defaultVal;
            }
        }
    
    }

    6、ResObject对象

    package com.common.beans;
    
    import java.io.Serializable;
    /**
     * 
     * 项目名称:---
     * 模块名称:常用工具
     * 功能描述:返回结果
     * 创建人: mao2080@sina.com
     * 创建时间:2017年3月24日 下午4:21:58
     * 修改人: mao2080@sina.com
     * 修改时间:2017年3月24日 下午4:21:58
     */
    public class ResObject implements Serializable{
        
        /**序列号*/
        private static final long serialVersionUID = 589903502110209046L;
    
        /**返回代码*/
        private int code = 200;
        
        /**返回信息*/
        private String desc;
        
        /**返回数据*/
        private Object data;
    
        /**
         * 
         * 构建函数
         * @author mao2080@sina.com
         * @created 2017年3月24日 下午4:25:23
         * @since
         */
        public ResObject() {
            
        }
        
        /**
         * 
         * 描述:构造函数
         * @author mao2080@sina.com
         * @created 2017年4月18日 下午3:32:26
         * @since 
         * @param data 数据
         */
        public ResObject(Object data) {
            super();
            this.data = data;
        }/**
         * 
         * 构建函数
         * @author mao2080@sina.com
         * @created 2017年3月24日 下午4:25:35
         * @since 
         * @param code 返回代码
         * @param desc 返回信息
         */
        public ResObject(int code, String desc) {
            super();
            this.code = code;
            this.desc = desc;
        }
    
        /**
         * 
         * 构建函数
         * @author mao2080@sina.com
         * @created 2017年3月24日 下午4:25:39
         * @since 
         * @param code 返回代码
         * @param desc 返回信息
         * @param data 返回数据
         */
        public ResObject(int code, String desc, Object data) {
            super();
            this.code = code;
            this.desc = desc;
            this.data = data;
        }
    
        public Object getData() {
            return data;
        }
    
        public void setData(Object data) {
            this.data = data;
        }
    
        public int getCode() {
            return code;
        }
    
        public void setCode(int code) {
            this.code = code;
        }
    
        public String getDesc() {
            return desc;
        }
    
        public void setDesc(String desc) {
            this.desc = desc;
        }
    
    }

    7、User对象

    package com.common.entity;
    
    import java.io.Serializable;
    
    /**
     * 
     * 项目名称:---
     * 模块名称:公共模块
     * 功能描述:用户实体
     * 创建人: mao2080@sina.com
     * 创建时间:2017年3月31日 下午3:34:41
     * 修改人: mao2080@sina.com
     * 修改时间:2017年3月31日 下午3:34:41
     */
    public class User implements Serializable{
        
        /**序列*/
        private static final long serialVersionUID = 403630406019480531L;
    
        /**用户标识*/
        private String id;
        
        /**用户名称*/
        private String name;
        
        /**密码*/
        private String password;
        
        /**邮件*/
        private String email;
    
        public User() {
            
        }
        
        public User(String id, String name) {
            super();
            this.id = id;
            this.name = name;
        }
    
        public User(String id, String name, String password, String email) {
            super();
            this.id = id;
            this.name = name;
            this.password = password;
            this.email = email;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
    }
     
  • 相关阅读:
    并发编程---守护进程
    并发编程---Process对象的其他属性或方法
    并发编程---开启进程方式---查看进程pid
    并发编程---操作系统
    ie浏览器的css bug
    链接内的图片与文字如何对齐?
    inline元素特性
    最大流EK算法模板
    数据结构 链式表
    运算表达式 栈应用
  • 原文地址:https://www.cnblogs.com/mao2080/p/6738030.html
Copyright © 2020-2023  润新知