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" %> < ...
随机推荐
- 神经网络与深度学习笔记 Chapter 1.
转载请注明出处:http://www.cnblogs.com/zhangcaiwang/p/6875533.html sigmoid neuron 微小的输入变化导致微小的输出变化,这种特性将会使得学 ...
- 错误Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future:
今天写PHP代码,遇到了这个非常不友好的报错(Deprecated: mysql_connect(): The mysql extension is deprecated and will be re ...
- Tomcat8安装及配置教程
Apache Tomcat8.0安装及配置教程.. Apache Tomcat8.0官方网站链接:http://tomcat.apache.org/ apache-tomcat-8.0.39-wi ...
- ExtJs6获取form里的数据
1.PanoramForm.js form的items部分 items: [{ xtype: 'form', id:'customerF', modelValidation: true, defaul ...
- SSH:Action中Service无法实例化
原来的代码: MailAction: public class MailAction extends ActionSupport { private SysuserinfoService sysuse ...
- Python练习28
[之前发布到本人的51cto博客,现转过来] 无意看到老男孩的博文:合格linux运维人员必会的30道shell编程面试题及讲解 http://oldboy.blog.51cto.com/256141 ...
- CSS3学习手记
--------------------CSS3新增选择器--------------------#E:nth-child(n):匹配元素类型为E且是父元素的第n个子元素#E:nth-last-chi ...
- spring boot / cloud (十六) 分布式ID生成服务
spring boot / cloud (十六) 分布式ID生成服务 在几乎所有的分布式系统或者采用了分库/分表设计的系统中,几乎都会需要生成数据的唯一标识ID的需求, 常规做法,是使用数据库中的自动 ...
- 机器学习实战之 第10章 K-Means(K-均值)聚类算法
第 10 章 K-Means(K-均值)聚类算法 K-Means 算法 聚类是一种无监督的学习, 它将相似的对象归到一个簇中, 将不相似对象归到不同簇中.相似这一概念取决于所选择的相似度计算方法.K- ...
- 3_SQL Server通过代码的方式添加数据
--通过代码添加数据 --第一种方式--insert into 表名(列名1,列名2,...)values (值1,值2,...)insert into Department(DepName, Dep ...