分页用到的两个实体类

package com.yangwei.shop.entity;

/** * 注意  get,set,remove 方法与一般的实体类的不同*/

public class SystemContext {
    private static ThreadLocal<Integer> pageSize = new ThreadLocal<Integer>();
    private static ThreadLocal<Integer> pageIndex = new ThreadLocal<Integer>();
    private static ThreadLocal<Integer> pageOffset = new ThreadLocal<Integer>();
    /**
     * 升序还是降序
     */
    private static ThreadLocal<String> order = new ThreadLocal<String>();
    /**
     * 根据那个字段排序
     */
    private static ThreadLocal<String> sort = new ThreadLocal<String>();

    public static String getOrder() {
        return order.get();
    }

    public static void setOrder(String _order) {
        order.set(_order);
    }

    public static void removeOrder() {
        order.remove();
    }

    public static String getSort() {
        return sort.get();
    }

    public static void setSort(String _sort) {
        sort.set(_sort);
    }

    public static void removeSort() {
        sort.remove();
    }

    public static int getPageOffset() {
        return pageOffset.get();
    }

    public static void setPageOffset(int _pageOffset) {
        pageOffset.set(_pageOffset);
    }

    public static void removePageOffset() {
        pageOffset.remove();
    }

    public static void setPageSize(int _pageSize) {
        pageSize.set(_pageSize);
    }

    public static int getPageSize() {
        return pageSize.get();
    }

    public static void removePageSize() {
        pageSize.remove();
    }

    public static void setPageIndex(int _pageIndex) {
        pageIndex.set(_pageIndex);
    }

    public static int getPageIndex() {
        return pageIndex.get();
    }

    public static void removePageIndex() {
        pageIndex.remove();
    }
}
package com.yangwei.shop.entity;

import java.util.List;

public class Pager<E> {
    /**
     * 第几页
     */
    private int pageIndex;
    /**
     * 每页显示多少条
     */
    private int pageSize;
    /**
     * 分页的开始值
     */
    private int pageOffset;
    /**
     * 总共多少条记录
     */
    private int totalRecord;
    /**
     * 总共多少页
     */
    private int totalPage;
    /**
     * 放置具体数据的列表
     */
    private List<E> datas;

    public int getPageIndex() {
        return pageIndex;
    }
    public void setPageIndex(int pageIndex) {
        this.pageIndex = pageIndex;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public int getTotalRecord() {
        return totalRecord;
    }
    public void setTotalRecord(int totalRecord) {
        this.totalRecord = totalRecord;
    }
    public int getTotalPage() {
        return totalPage;
    }
    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }
    public List<E> getDatas() {
        return datas;
    }
    public void setDatas(List<E> datas) {
        this.datas = datas;
    }
    public int getPageOffset() {
        return pageOffset;
    }
    public void setPageOffset(int pageOffset) {
        this.pageOffset = pageOffset;
    }

}

接下来就是真正的分页了,  mybatis中mapper.xml配置文件中的两条查询语句如下

    <!-- 多个参数的形式,需要使用map来存储-->
    <select id="find" parameterType="map" resultType="User">
        <!-- 只要是#{}这种形式的,都会以?形式替代,对应字符串形式,都会加上引号-->
        <!-- 只要是${}这种形式的,不会用?形式替代,传过来什么,就什么替代-->
        select * from t_user where
            ( username like #{name} or nickname like #{name} )
            order by ${sort} ${order}
        limit #{pageOffset},#{pageSize}

        <!--
        对应的sql便是
        select * from t_user where (username like ? or nickname like ?)
            order by id desc limit ? ?
        -->
    </select>
    <select id="count" parameterType="map" resultType="int">
        select count(*) from t_user where
            ( username like #{name} or nickname like #{name} )

    </select>

java代码实现分页

/**
     * 分页显示
     */
    public static Pager<User> testFind(String name){
        int pageOffset=SystemContext.getPageOffset();
        int pageSize=SystemContext.getPageSize();
        String order=SystemContext.getOrder();
        String sort=SystemContext.getSort();
        Pager<User> pages=new Pager<User>();
        SqlSession session=null;

        try {
            session = MyBatisUtil.createSession();
            Map<String,Object> map=new HashMap<String,Object>();
            //使用like模糊查询的时候,注意百分号加在这里
            map.put("name", "%"+name+"%");
            map.put("pageOffset", pageOffset);
            map.put("pageSize", pageSize);
            map.put("order", order);
            map.put("sort", sort);
            List<User> users=session.selectList(User.class.getName()+".find", map);

            pages.setDatas(users);
            pages.setPageOffset(pageOffset);
            pages.setPageSize(pageSize);

            int count=session.selectOne(User.class.getName()+".count", map);
            pages.setTotalRecord(count);

            //所有的数据都存到了Pager对象中
        } finally{
            MyBatisUtil.closeSession(session);
        }
        return pages;

    }

测试上面分页代码

       SystemContext.setPageOffset(0);
            SystemContext.setPageSize(15);
            SystemContext.setOrder("desc");
            SystemContext.setSort("id");

            Pager<User> ps = testFind("zhang");
            System.out.println(ps.getTotalRecord());
            for(User u: ps.getDatas()){
                System.out.println(u.getNickname());
            }
            

mybatis-分页显示数据的更多相关文章

  1. 转:JSP 分页显示数据 (Oracle)

    JSP 分页显示数据 (Oracle) 标签: Oracle分页JSP分页 2013-11-19 20:40 3598人阅读 评论(1) 收藏 举报  分类: Web(11)  版权声明:本文为博主原 ...

  2. JSP 分页显示数据 (Oracle)

    要实现分页,首先我们要做的就是如何来编写SQL语句,网上也有很多,大家可以搜一下.在这里,我们使用一种比较常用的方式来编写SQL语句.代码如下: ----分页显示 select * from (sel ...

  3. ASP.NET(五):ASP.net实现真分页显示数据

    导读:在上篇文章中,介绍了用假分页实现数据的分页显示 ,而避免了去拖动滚动条.但,假分页在分页的同时,其实是拖垮了查询效率的.每一次分页都得重新查询一遍数据,那么有没有方法可以同时兼顾效率和分页呢,那 ...

  4. ASP.NET(四):ASP.net实现假分页显示数据

    导读:在做数据查询的时候,有的时候查询到的数据有很多.通常呢,我们一般都是去拖动右侧边的滚动条.但是,有了分页后,我们就可以不必是使用滚动条,而直接通过分页查看我们想要的数据.在分页的过程中,有分为真 ...

  5. repeater 分页显示数据

    表名:ChinaStates 控件:Repeater 查询代码DA: public class ChinaStatesDA { private DataClassesDataContext Conte ...

  6. ligerui做分页显示数据

    现在前台技术用到的是ligerui,一直想写一个有关ligerui的显示,利用加班的今天偷点闲复制一下下,当自己的一些小资料吧,不会的时候,还可以来看看............稍微有点多,毕竟是从前后 ...

  7. ListView OnScrollListener详解(滑屏分页显示数据)

    package com.action; import java.util.ArrayList; import java.util.List; import android.app.Activity; ...

  8. 用react分页显示数据

    去年年底,尝试着用react写个组件化的页面! demo地址 里面有一个list页面弄了一下数据的分页展示 展示一下主要三个组件:父组件listBox.列表组件List.按钮组件PageButton ...

  9. jQuery+Ajax+PHP+Mysql实现分页显示数据

    css <style type="text/css"> #loading{ position: absolute; top: 200px; left:400px; } ...

  10. JSP页面分页显示数据

    效果如上图所示!最多显示10条:完整jsp和后台代码如下: <%@ page contentType="text/html;charset=UTF-8" %> < ...

随机推荐

  1. 接口测试之soapUI(WebService)

    一.WebService介绍   WebService是一种跨编程语言和跨操作系统平台的远程调用技术,XML+XSD,SOAP和WSDL就是构成WebService平台的三大技术.   1)XML+X ...

  2. 克隆一个centos虚拟机的环境配置

    克隆环境预处理设置 iptables -F  #清除规则 /etc/init.d/iptables save vim /etc/selinux/config selinux=disabled   # ...

  3. 【Linux】查看进程号

    1.查看占用8080端口的进程号 lsof -i: | awk '{print $2}' | uniq | grep -P -o "[0-9]{2,5}" 2.查看使用java进程 ...

  4. vue-cli脚手架npm相关文件解读(8)check-versions.js

    系列文章传送门: 1.build/webpack.base.conf.js 2.build/webpack.prod.conf.js 3.build/webpack.dev.conf.js 4.bui ...

  5. Spring(一)--作用、IOC容器细节、搭配环境、Spring实验

    1.Spring作用:      1.生态体系庞大,全能型选手![springmvc是其一个子模块,jdbcTemplate能直接操作数据库!]      2.将其他组件粘合在一起      比如将S ...

  6. Java数组笔记

    # 数组--------内存 # 2017/8/31 15:29:19  ## 数组(容器) ## - 为了存储同种数据类型的多个值 - 概念     - 数组是可以存储同一种数据类型多个元素的集合, ...

  7. Ubuntu安装卸载anaconda

    安装要点: 1.在Anaconda官网https://www.continuum.io/downloads内下载需要的版本: 2.打开终端--进入下载安装包所在的文件夹(cd 文件名)--输入命令:b ...

  8. k-临近算法学习

    本章主要内容: k-临近算法是通过对象本身的特征将对象划分到某一类型中去,比如电影中的题材类型的分类是,可能就会考虑到电影中出现的镜头出现的次数的多少将电影划分为动作电影,爱情电影等等,本次的随笔参考 ...

  9. JDK安装与配置详细图文教程

    目的:本人健忘,以后难免会重装系统啥的,软件卸了装是常有的事,特此写此详细教程,一是方便自己以后重装的时候可以看看:二是如果有某位初学者有幸光临,也可以给一点参照.下面我会从JDK的下载.安装.环境变 ...

  10. Python之set

    set set集合,是一个无序且不重复的元素集合 set的优势 set 的访问数度快 set 原生解决数据重复问题 # 数据库中原有 old_dict = { "#1":{ 'ho ...