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" %> < ...
随机推荐
- Hive调优实践
1 文件格式的选择 ORC格式确实要比textFile要更适合于hive,查询速度会提高20-40%左右 例子1: youtube1的文件格式是TextFIle,youtube3的文件格式是orc h ...
- Android开发之SoundPool使用详解
使用SoundPool播放音效 如果应用程序经常播放密集.急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了.因为MediaPlayer存在如下缺点: 1) 延时时间较长 ...
- linux学习网站
centos中文站 cnblogs.com/bethal/p/6007962.html 最火软件 veryhuo.com 学网资讯 xue163.com/Network/ linux大神 linux ...
- Redis在电商中的实际应用-Java
示例代码用Jedis编写. 1. 各种计数,商品维度计数和用户维度计数 说起电商,肯定离不开商品,而附带商品有各种计数(喜欢数,评论数,鉴定数,浏览数,etc),Redis的命令都是原子性的,你可以轻 ...
- 理解javascript 对象,原型对象、闭包
javascript作为一个面向对象的语言,理解 对象.原型.闭包.模块模式等技术点对于成为一名合格的javascript程序员相当重要,多年没写过blog,今天就先拋个玉,在下基本也不做前端,但颇感 ...
- jQuery遍历-同胞
同胞拥有相同的父元素. 通过 jQuery,您能够在 DOM 树中遍历元素的同胞元素. 在 DOM 树中水平遍历 有许多有用的方法让我们在 DOM 树进行水平遍历: siblings() next() ...
- [2015-11-10]iis远程发布配置
近期工作总结备忘,下次重新部署时再总结更新. 基本流程 一台初始化的win2012: 安装服务器角色,启用IIS,启用IIS管理服务,启用.Net相关框架等: 安装webdeploy工具(选择完整安装 ...
- Dapper获取连接类
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...
- MVC导入命名空间
为什么要导入 一次性导入,避免每个页面都要导入,代码看起来更为清晰,不再带一个长长的命名空间,视图里面可以直接写类名了. 导入方法 在Views文件夹的web.config的namespaces里面配 ...
- 实现NFS共享wordpress
author:JevonWei 版权声明:原创作品 两台Web服务器,一台mysql服务器,一台NFS服务器,一台DNS服务器 拓扑结构 拓扑环境 web1 192.168.198.110 web2 ...