mybatis-generator 添加分页操作

源码: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,有需要可以自行下载(源码迭代较快,可能后期相关部分测试代码会被屏蔽,但大体功能不会进行屏蔽,见谅);

时间: 2024-10-14 08:30:01

mybatis-generator 添加分页操作的相关文章

Mybatis Generator实现分页功能

Mybatis Generator实现分页功能 分类: IBATIS2013-07-17 17:03 882人阅读 评论(1) 收藏 举报 mybatisibatisgeneratorpage分页 众所周知,Mybatis本身没有提供基于数据库方言的分页功能,而是基于JDBC的游标分页,很容易出现性能问题.网上有很多分页的解决方案,不外乎是基于Mybatis本机的插件机制,通过拦截Sql做分页.但是在像Oracle这样的数据库上,拦截器生成的Sql语句没有变量绑定,而且每次语句的都要去拦截,感觉

SpringBoot整合mybatis使用pageHelper插件进行分页操作

SpringBoot整合mybatis分页操作 SpringBoot整合Mybatis进行分页操作,这里需要使用Mybatis的分页插件:pageHelper, 关于pageHelper的介绍,请查看官方文档: https://pagehelper.github.io/ 1.使用前配置 关于pageHelper的使用配置,主要有以下2个步骤: 1.1.在pom文件中导入pageHelper依赖 <dependency> <groupId>com.github.pagehelper&

Mybatis分页-利用Mybatis Generator插件生成基于数据库方言的分页语句,统计记录总数 (转)

众所周知,Mybatis本身没有提供基于数据库方言的分页功能,而是基于JDBC的游标分页,很容易出现性能问题.网上有很多分页的解决方案,不外乎是基于Mybatis本机的插件机制,通过拦截Sql做分页.但是在像Oracle这样的数据库上,拦截器生成的Sql语句没有变量绑定,而且每次语句的都要去拦截,感觉有点浪费性能. Mybatis Generator是Mybatis的代码生成工具,可以生成大部分的查询语句. 本文提供的分页解决方案是新增Mybatis Generator插件,在用Mybatis

MyBatis Generator实现MySQL分页插件

MyBatis Generator是一个非常方便的代码生成工具,它能够根据表结构生成CRUD代码,可以满足大部分需求.但是唯一让人不爽的是,生成的代码中的数据库查询没有分页功能.本文介绍如何让MyBatis Generator生成的代码具有分页功能. MyBatis Generator结合Maven的配置和使用 在实现分页之前,首先简单介绍MyBatis Generator如何使用. MyBatis Generator配置文件 MyBatis Generator通常会有一个xml配置文件,用来指

mybatis generator生成带有分页的Mybatis代码

MyBatis开发,最让人开心的就是可以随意写SQL,这样有多好的性能的SQL都可以进行调优. 但是MyBatis的优点也是它的缺点,不论什么项目都需要编写SQL,令人头疼的要命,一般业务(例如单表操作)的简单查询.修改.删除.插入,都需要自己手工去编写SQL. 还好有第三方的软件给我解决这些事情,可以像使用Hibernate一样使用MyBatis,当需要进行特殊定制的再进行修改. 1.      本文档主要描述 1.表格: 2.视图:3.存储过程:4.自定义的MyBatis 1.1.     

mybatis generator为实体类生成自定义注释(读取数据库字段的注释添加到实体类,不修改源码)

我们都知道mybatis generator自动生成的注释没什么实际作用,而且还增加了代码量.如果能将注释从数据库中捞取到,不仅能很大程度上增加代码的可读性,而且减少了后期手动加注释的工作量. 1.首先定义注释生成插件 MyCommentGenerator.java package com.ilovey.mybatis.comment; import org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generato

SpringBoot 添加mybatis generator 自动生成代码插件

自动生成数据层代码,提高开发效率 1.pom添加插件,并指定配置文件路径 <!-- mybatis generator 自动生成代码插件 --> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.5</version> <

mybatis结合generator进行分页插件PluginAdapter开发

使用org.mybatis.generator生成UserExample时,无法进行分页,使用下面这个类运行generator便可以生成分页相关的属性了 package org.mybatis.generator.plugin; import java.util.List; import org.mybatis.generator.api.CommentGenerator; import org.mybatis.generator.api.IntrospectedTable; import or

Myeclipse2014添加mybatis generator插件

Myeclipse2014把mybatis generator插件直接放在dropins文件夹下,重启后不能成功安装mybatis插件. 既然离线安装不成功,可以选择在线安装 1.选择 Help->Install from site... 2.在弹出的对话框中点击右上角的Add按钮. 3.在弹出的对话框中输入 Name:mybatis Location:https://dl.bintray.com/mybatis/mybatis-generator (location中可以输入以上地址,也可以点