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" %> < ...
随机推荐
- asp.net core MVC 过滤器之ActionFilter过滤器(二)
本系类将会讲解asp.net core MVC中的内置全局过滤器的使用,将分为以下章节 asp.net core MVC 过滤器之ExceptionFilter过滤器(一) asp.net core ...
- jquery插件封装
HTML <!DOCTYPE html> <html> <head> <title></title> <style> .page ...
- [Firewall] iptables Configuration
iptables usage: Add Rules: iptables -I INPUT -p tcp --dport -j ACCEPT iptables -I INPUT -p tcp --dpo ...
- linux虚拟机ip地址更改
在虚拟机模式下 进入 cd /etc/sysconfig/network-scripts/ vim ifcfg-eth0 编辑 IPADDR=新的内网ip PREFIX = 24 (对应255.25 ...
- OminiMarkupPreview快捷键
The default key bindings: Windows, Linux: Ctrl+Alt+O: Preview Markup in Browser. Ctrl+Alt+X: Export ...
- C#异步编程(async and await)及异步方法同步调用
1.什么是异步? 异步操作通常用于执行完成时间可能较长的任务,如打开大文件.连接远程计算机或查询数据库=异步操作在主应用程序线程以外的线程中执行.应用程序调用方法异步执行某个操作时,应用程序可在异步方 ...
- Java入门(7)——循环和debug 调试
循环: while 循环: 格式: int i = 0; ① //初始化条件 while(i < 10) { ② //判断条件 System.out.println(i); ④ //循环 ...
- 关于package.json的理解
在我们打包项目的时候或者使用node的时候,常常会看到package.json这个文件,里面乱七八糟的一大堆json,开始的时候没注意,以为是使用node或者npm的时候自动创建的,后来自己写demo ...
- 前端开发【第2篇:CSS】
鸡血 样式的属性多达几千个,但别担心,按照80-20原则,常用的也就几十个,你完全可以掌握它. Css初识 HTML的诞生 早期只有HTML的时候为了让HTML更美观一点,当时页面的开发者会把颜色写到 ...
- Cython的用法以及填坑姿势
因为项目需要,需要优化已有的Python代码.目前Python代码的执行过程是将Python代码转变成一行行指令,然后解释器解释指令的执行,调用到C代码层.如果去掉指令解释这个阶段,直接进入C代码层, ...