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" %> < ...
随机推荐
- install redis
1.Office Download redis.tar.gz from website --- redis.io 2.uncompact file $ tar zxvf redis-3.2.9.ta ...
- 推广技巧:新站要如何推广引流做到日IP10000?
一.回复高人气帖子插楼推广 1.找高人气的帖子在二楼或者二楼楼层中直接插入链接推广.虽然这种方法存活率比较低,但也算是贴吧里面最直接的有效的方法.一般我们分为三种: 1.1图中链接是一个短网址,这个是 ...
- 电源库(Sources)
- Python教程百度网盘哪里有?
Python为我们提供了非常完善的基础代码库,覆盖了网络.文件.GUI.数据库.文本等大量内容,被形象地称作"内置电池(batteries included)".带你快速入门的Py ...
- Cookie常用操作以及属性
概述 最近项目要用到cookie存储部分用户信息;研究了一下做一下分享 Cookie 是服务器保存在浏览器的一小段文本信息,每个 Cookie 的大小一般不能超过4KB.浏览器每次向服务器发出请求,就 ...
- C#设计模式(4)-抽象工厂模式
引言 上一篇介绍了设计模式中的简单工厂模式-C#设计模式(3)-工厂方法模式,本篇将介绍抽象工厂模式: 抽象工厂模式简介 抽象工厂模式(AbstractFactory):提供一个创建一系列相关或相互依 ...
- geotrellis使用(三十二)大量GeoTiff文件实时进行TMS服务
前言 在上一篇文章中我讲了如何直接将Geotiff文件发布为TMS服务,在其中只讲了单幅Geotiff的操作,其实单幅这种量级的数据对Geotrellis来说就是杀鸡焉用牛刀,Geotrellis针对 ...
- 求N个元素的子集合个数
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt406 一个集合有n个元素,请问怎么算出来它的子集(包括空集和本身)是 2的n ...
- Java设计模式之-------->"代理模式"
01.什么是代理模式? 解析:代理(Proxy):代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不想或者不能直接引用另一个对象, 而代理对象可以在客户端和目标 ...
- tkinter第三章(单选和多选)RadioButton CheckButton
最简单的CheckButton多选类 import tkinter as tk #checkButton的内容,多选 root = tk.Tk() v = tk.IntVar()#装整形变量的 #va ...