分页用到的两个实体类

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. 设计模式(7)--Bridge(桥接模式)--结构型

    1.模式定义: 桥接模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式.桥接模式的用意是“将抽象化(Abstraction)与实现化(Impleme ...

  2. jenkins 邮件添加附件

    背景 当CI执行失败的时候,想获取到失败的用例,然后在本地调试,testNG是自带一个testng-failed.xml来记录的: 想法:尝试使用git 来push这个文件到远程仓库,然后本地pull ...

  3. postman也可以使用F12功能

    背景: 做过接口测试的话,大多数都知道或使用过postman工具,使用postman的时候,有时候希望也可以像chrome一样使用F12功能,这样方便观察一些数据,尤其是当你使用了postman的变量 ...

  4. python的eval函数

    eval函数介绍:将字符串str当成有效的表达式来求值并返回计算结果.语法: eval(source[, globals[, locals]]) -> value参数: source:一个Pyt ...

  5. Connector

    增加project bar窗口,在编辑大规模工程电路时,方便管理电路的各个层次,在分页编辑大规模工程电路时,可以用place中的off-page connector 进行每一页的联接.

  6. 记一次JavaWeb网站技术架构总结

    题记 工作也有几多年了,无论是身边遇到的还是耳间闻到的,多多少少也积攒了自己的一些经验和思考,当然,博主并没有太多接触高大上的分布式架构实践,相对比较零碎,随时补充. 俗话说的好,冰冻三尺非一日之寒, ...

  7. python3 安装及项目管理安装

    python3 一.下载安装 地址:https://www.python.org/downloads/ 安装:傻瓜式安装:我的目录如下 二.环境配置 [右键计算机]-->[属性]-->[高 ...

  8. < 软件工程 第一次作业 >

    自我介绍: 老师好! 我叫李智强,专业是计算机科学与技术,我自己也喜欢这个专业,然后这是我第一次用博客写自我介绍,可能会写的有点不好,还请包涵. 课程期望和目标: 第一次上课,听着老师说我们可能会做很 ...

  9. 49、html基础认识&常用标签(1)

    从今天期我们进入前端的学习,先学习html,没有任何需要逻辑需要烧脑,只需要记忆.练习.练习.练习. 一.HTML初识 1.web服务本质 import socket def main(): sock ...

  10. PowerShell: 问题,此系统上禁止运行脚本解决方法

    刚学Django,在PowerShell上建立一个虚拟环境,准备激活,问题来了:    激活的时候报错了,有点儿懵,之前在命令行没问题啊,我又去命令行试了下,果然可以: 感受到了暴击,赶紧上网求助大神 ...