mybatis-分页显示数据
分页用到的两个实体类
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-分页显示数据的更多相关文章
- 转:JSP 分页显示数据 (Oracle)
JSP 分页显示数据 (Oracle) 标签: Oracle分页JSP分页 2013-11-19 20:40 3598人阅读 评论(1) 收藏 举报 分类: Web(11) 版权声明:本文为博主原 ...
- JSP 分页显示数据 (Oracle)
要实现分页,首先我们要做的就是如何来编写SQL语句,网上也有很多,大家可以搜一下.在这里,我们使用一种比较常用的方式来编写SQL语句.代码如下: ----分页显示 select * from (sel ...
- ASP.NET(五):ASP.net实现真分页显示数据
导读:在上篇文章中,介绍了用假分页实现数据的分页显示 ,而避免了去拖动滚动条.但,假分页在分页的同时,其实是拖垮了查询效率的.每一次分页都得重新查询一遍数据,那么有没有方法可以同时兼顾效率和分页呢,那 ...
- ASP.NET(四):ASP.net实现假分页显示数据
导读:在做数据查询的时候,有的时候查询到的数据有很多.通常呢,我们一般都是去拖动右侧边的滚动条.但是,有了分页后,我们就可以不必是使用滚动条,而直接通过分页查看我们想要的数据.在分页的过程中,有分为真 ...
- repeater 分页显示数据
表名:ChinaStates 控件:Repeater 查询代码DA: public class ChinaStatesDA { private DataClassesDataContext Conte ...
- ligerui做分页显示数据
现在前台技术用到的是ligerui,一直想写一个有关ligerui的显示,利用加班的今天偷点闲复制一下下,当自己的一些小资料吧,不会的时候,还可以来看看............稍微有点多,毕竟是从前后 ...
- ListView OnScrollListener详解(滑屏分页显示数据)
package com.action; import java.util.ArrayList; import java.util.List; import android.app.Activity; ...
- 用react分页显示数据
去年年底,尝试着用react写个组件化的页面! demo地址 里面有一个list页面弄了一下数据的分页展示 展示一下主要三个组件:父组件listBox.列表组件List.按钮组件PageButton ...
- jQuery+Ajax+PHP+Mysql实现分页显示数据
css <style type="text/css"> #loading{ position: absolute; top: 200px; left:400px; } ...
- JSP页面分页显示数据
效果如上图所示!最多显示10条:完整jsp和后台代码如下: <%@ page contentType="text/html;charset=UTF-8" %> < ...
随机推荐
- 【Linux】管理在线用户
查看当前在线用户 [root@localhost ~]# who root pts/ -- : (111.34.103.23) 查看在线用户 [root@localhost ~]# w :: up d ...
- VMware Workstation 12 Pro 之安装Windows10 EP系统
VMware Workstation 12 Pro 之安装Windows10 EP系统... --------------- 先准备好要用的Win10的镜像文件ISO ---------------- ...
- nopCommerce 3.9 大波浪系列 之 使用Redis主从高可用缓存
一.概述 nop支持Redis作为缓存,Redis出众的性能在企业中得到了广泛的应用.Redis支持主从复制,HA,集群. 一般来说,只有一台Redis是不可行的,原因如下: 单台Redis服务器会发 ...
- sql unique约束详解
UNIQUE 约束唯一标识数据库表中的每条记录. UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证. PRIMARY KEY 拥有自动定义的 UNIQUE 约束. 请注意 ...
- tensorflow安装调试总结(持续更新)
这段时间需要部署tensorflow到linux上,由于堡垒机不能连外网,所以pip.apt-get.wget.git统统不能用,然后就是各种调试了,下面整理了一些遇到的问题和解决方案,供大家参考(C ...
- 深入理解HTTP协议—HTTP协议详解(真的很经典)
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
- 基于hdp2.5升级phoenix版本为4.8
hdp2.5自带的phoenix是4.7的,而客户的驾驶舱项目跑在4.7的phoenix上是有问题的,如:如果表中没有数据,执行select count(*) from 表,返回的是空,这时导致驾驶舱 ...
- Gitlab-CI持续集成之Runner配置和CI脚本
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; f ...
- Mycat 设置全局序列号
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt332 全局序列号介绍 在实现分库分表的情况下,数据库自增主键已无法保证自增主 ...
- 汇编指令-adr与ldr伪汇编区别(8)
adr :相对寻址,与当前位置有关 ldr :绝对寻址,与当前位置无关 在初始化SDRAM时就会用到adr,代码如下: /* 初始化SDRAM */ ldr r0,=BWSCON //r0=SDRA ...