分页用到的两个实体类

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. mybatis 的逆向工程

    1      逆向工程 1.1  什么是逆向工程 mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.Java ...

  2. vim 基本编辑操作

    一.光标跳转到指定行 1.在命令模式下,跳转到指定行  :n   (n为行号) 2.命令行加参数 vim +n fileName 3.命令行加参数 vim + fileName 光标移至文件底部 4. ...

  3. Sublime Text前端开发工具介绍

    Sublime Text前端开发工具介绍.. Sublime Text这款前端开发工具中的非常优秀的特性进行介绍 ------------ sublime text 3 3114 注册码 —– BEG ...

  4. WeQuant交易策略—EMA指标

    策略名称:EMA指标策略关键词:指数移动平均.双均线.动态止损.方法:1)用快慢两条指数移动平均线的交叉作为买入卖出信号:2)快线自下而上穿过慢线,买入:自上而下穿过慢线,卖出:3)持仓期间计算净值的 ...

  5. 不安装vc2015 Redistributable解决api-ms-win-crt-runtime-l1-1-0.dll丢失错误

    一.背景 最近用到python下的cx_Oracle模块,开发环境中测试正常,用cx_freeze打包后,到用户机器上一部署,各种奇奇怪怪的问题频出,运行环境如下: a.开发环境:64位win10操作 ...

  6. asp.net mvc 接入阿里大于 短信验证码发送

    项目前端页面实例 第1步:登录阿里大于控制台 https://www.alidayu.com/center/user/account?spm=0.0.0.0.P1K1jG 第2步:创建应用 第3步:配 ...

  7. H5输入框实时记录文字个数

    需求: 移动端用户反馈功能,有的用户反馈功能是有字数限制的,比如限制为200字 解决方法: 在项目中我们使用的Vue框架,所以可以直接进行绑定,代码如下 <section class=" ...

  8. 使用VMware Workstation安装win7镜像文件时遇见的错误

    最近打算使用虚拟机安装个系统玩玩,就去网站上找了教程安装下win7系统.但是在安装过程中遇见两个问题,现在把遇见的问题总结记录一下,以及解决方法罗列一下. 我当时使用的是VMware 12版的,系统是 ...

  9. java使用字节流和字符流实现文件复制

    大家在Java开发中都会遇到文件复制的文件,众所周知,需要通过文件输入输出流实现. 那究竟该怎么做那,话不多说,直接上代码: 一,使用字节流复制文件 public class FileByteCopy ...

  10. linux使用bbswitch+nvidia-xrun取代bumblebee

    nvidia-xrun的比bumblebee使用nvidia optimus的性能更好,关键是xrun支持Vulkan. 本文保存并更新在github:levinit/itnotes/linux/ar ...