文档章节

mybatis-generator 添加分页操作

alexgaoyh
 alexgaoyh
发布于 2015/04/23 14:01
字数 732
阅读 4274
收藏 6

    源码:https://git.oschina.net/alexgaoyh/MutiModule-parent.git

    效果图:

    左边为分页操作的两个链接,默认一页10条数据,右边为数据库中的数据,页面没有处理,只是单纯的数据展现。


之前使用mybatis-generator插件生成了通用的代码部分,下面介绍一些修改点:

插件生成的 DemoExample 类,增加新的属性 (get set方法省略)

protected MyRowBounds myRowBounds;

插件生成的 DemoMapper.xml部分,新增

<sql id="myRowBoundsSQL">
  	<if test="myRowBounds != null">
  		limit ${myRowBounds.offset}, ${myRowBounds.limit}
  	</if>
  </sql>



并且将这一部分内容 添加到 
<select id="selectByExample" resultMap="BaseResultMap" parameterType="com.alexgaoyh.MutiModule.persist.demo.DemoExample" >

这个select标签的最后一部分,意味着如果 DemoExample  类中的 myRowBounds 属性如果不为空的话,在根据条件进行数据查询的时候,能够根据数据进行limit,分页操作。


其他地方不需要做任何修改,以上的两个地方的修改,就已经能够满足分页操作了。


下面附上两个util类

package com.alexgaoyh.MutiModule.persist.util;

import java.io.Serializable;

/**
 *  与  org.apache.ibatis.session.RowBounds 类似,添加了pageNumber属性
 *  
 * @author alexgaoyh
 *
 */
public class MyRowBounds implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -2860692762946249134L;
	
	public final static int NO_ROW_OFFSET = 0;
	public final static int NO_ROW_LIMIT = Integer.MAX_VALUE;
	public final static MyRowBounds DEFAULT = new MyRowBounds();
	
	public final static int NO_PAGENUMBER = 0;

	//偏移量
	private int offset;
	//条数
	private int limit;
	//页码
	private int pageNumber;

	public MyRowBounds() {
		this.offset = NO_ROW_OFFSET;
		this.limit = NO_ROW_LIMIT;
		this.pageNumber = NO_PAGENUMBER;
	}

	public MyRowBounds(int offset, int limit, int pageNumber) {
	    this.offset = offset;
	    this.limit = limit;
	    this.pageNumber = pageNumber;
	}
	
	/**
	 * 返回RowBounds实体信息
	 * @param pageNumber 页码
	 * @param pageSize 一页条数
	 */
	public MyRowBounds(int pageNumber, int pageSize) {
		this.pageNumber = pageNumber;
		this.limit = pageSize;
		this.offset = (pageNumber - 1) * pageSize;
	}
	

	public int getOffset() {
		return offset;
	}

	public int getLimit() {
		return limit;
	}

	public int getPageNumber() {
		return pageNumber;
	}

	public void setPageNumber(int pageNumber) {
		this.pageNumber = pageNumber;
	}

	public void setLimit(int limit) {
		this.limit = limit;
	}
	
}



package com.alexgaoyh.MutiModule.persist.util;

import java.io.Serializable;
import java.util.List;

/**
 * 分页类
 * @author alexgaoyh
 *
 * @param <E>
 */
public class Pagination<E> implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -5631795318226681173L;

	private int total;
	
	private List<E> data;
	
	private MyRowBounds rowBounds;
	
	public Pagination(MyRowBounds rowBounds, int total) {
		
		this.rowBounds = new MyRowBounds(rowBounds.getOffset(), rowBounds.getLimit(), rowBounds.getPageNumber());
		
		this.total = total;
		
	}
	
	public Pagination(MyRowBounds rowBounds, int total, List<E> data) {
		
		this.rowBounds = new MyRowBounds(rowBounds.getOffset(), rowBounds.getLimit(), rowBounds.getPageNumber());
		
		this.total = total;
		
		this.data = data;
		
	}

	public int getTotal() {
		return total;
	}

	public void setTotal(int total) {
		this.total = total;
	}

	public List<E> getData() {
		return data;
	}

	public void setData(List<E> data) {
		this.data = data;
		if(data != null && data.size() > this.total) {
			this.data = null;
		}
	}

	public MyRowBounds getRowBounds() {
		return rowBounds;
	}

	public void setRowBounds(MyRowBounds rowBounds) {
		this.rowBounds = new MyRowBounds(rowBounds.getOffset(), rowBounds.getLimit(), rowBounds.getPageNumber());
	}
	
	
	/**
	 * 自动以方法,获取页码总数
	 */
	public int getPageTotal() {
		int size = this.rowBounds.getLimit();
		return (int)Math.ceil( ((double)this.total * 1.0D) / (double)size );
	}
}



PS:

1:网络上有很多通用Mapper的开源项目,能够完成分页操作,简单看了一下,能够实现,但是大部分都使用了监听器,监听执行的sql,在进行处理,个人觉得这样操作的话,对sql都进行监听,在拼接sql,在某种程度上违背了mybatis的思想(sql 写在mapper.xml内部,sql与java类分开)。所以采用了上面的执行方法;

2:源码部分已经上传到git,有需要可以自行下载(源码迭代较快,可能后期相关部分测试代码会被屏蔽,但大体功能不会进行屏蔽,见谅);





© 著作权归作者所有

共有 人打赏支持
alexgaoyh

alexgaoyh

粉丝 76
博文 82
码字总数 65212
作品 1
郑州
后端工程师
私信 提问
加载中

评论(1)

i
itxx2016
呵呵,这个已经out了.
推荐国内[最著名]的mybatis代码生成网站 --- fwjava.com
数据库逆向框架代码生成工具:MyBatis Generator的使用

MyBatis Generator的详细介绍http://mybatis.github.io/generator/index.html MyBatis Generator With Maven http://mybatis.github.io/generator/running/runningWithMaven.html 1前言 前段......

蛙牛
2014/02/16
0
28
SpringBoot基础教程4-1-2 使用Mybatis操作数据库

1 概述 为什么选择Mybatis,一个很重要的原因是它,将封装与开放的完美结合,高效的生成增删改查的同时,又能满足复杂的场景,下面我们详细介绍,如何快速接入实现数据库的增删改查。 2 添加...

Mkeeper
01/03
0
0
spring-boot:spring boot2.0集成mybatis

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mr_OOO/article/details/84930318 文章目录 如何集成 测试 项目地址 参考文章 如何集成 添加依赖 此处默认已配...

Mr_OOO
2018/12/09
0
0
让MyBatis Generator产生的代码支持分页

本文提供一种方法,让MyBatis Generator产生的代码支持分页, 适用于MySQL。 分析 如果要获取分页信息,使用MySQL语句,我们需要怎么做呢? 在MySQL系统中,如果要完成一个分页,我们需要指定...

王孟君
2016/11/09
797
0
ShenzhenMirren/Spring-generator

基本介绍 官方QQ交流群号:519714660; Spring-generator是基于javafx8开发的图形界面Spring代码生成器,使用 Apache FreeMarker 作为代码文件的模板,用户可以一键将数据库中的表生成为任意风格...

ShenzhenMirren
2018/06/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

带标题的图片轮询展示

<div> <table width="671" cellpadding="0" cellspacing="0"> <tr height="5"> <td style="background-image:url(include/image/news_left_top_circle.jpg)" width="7"> </td> <td style="ba......

JackChenzp
33分钟前
0
0
Hanlp中N最短路径分词详细介绍

N-最短路径 是中科院分词工具NLPIR进行分词用到的一个重要算法,张华平、刘群老师在论文《基于N-最短路径方法的中文词语粗分模型》中做了比较详细的介绍。该算法算法基本思想很简单,就是给定...

左手的倒影
41分钟前
1
0
es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?

面试题 es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? 面试官心理分析 这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好...

架构师springboot
42分钟前
8
0
php面试题常见面试题

又是跳槽季,跳槽就有面试,面试难免会问一些理论问题,前面面试了几家,做了一些面试题,记住了一部分,整理了一下: 1.cookie 和session区别 session存在服务器,cookie存在浏览器;sessi...

后盾风云
47分钟前
3
0
华为Mate X显示适配指导来了!带你完美适配折叠屏

华为Mate X一经发布便引发了世界级的关注,除了史无前例的交互体验外,作为一款可以变形的手机,它还拥有多种不同的形态:展开时是8英寸全面屏,折叠后又变身为6.6英寸和6.38英寸两块屏幕。 ...

安卓绿色联盟
58分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部