Mybatis使用插件Mybatis-PageHelper进行翻页(SpringMVC+Spring+Mybatis-PageHelper)

4 篇文章 0 订阅
3 篇文章 0 订阅

使用SpringMVC+Spring+Mybatis-PageHelper实现翻页功能

一.翻页功能实现的简单工具类以及插件整合准备

Page类

public class Page<E> {
	//当前页
	private int pageNum;
	//每页显示条数
	private int pageSize;
	//总页数
	private int totalPage;
	//总记录
	private int totalRecord;
	//当前页所有数据
	private List<E> list;

	public Page() {
		super();
	}

	public Page(int pageNum, int pageSize, int totalPage, int totalRecord,
			List<E> list) {
		super();
		this.pageNum = pageNum;
		this.pageSize = pageSize;
		this.totalPage = totalPage;
		this.totalRecord = totalRecord;
		this.list = list;
	}

	get,set....
}

插件整合准备

架包


Mybatis整合

	<plugins>
		<!-- com.github.pagehelper为PageHelper类所在包名 -->
		<plugin interceptor="com.github.pagehelper.PageInterceptor">
			<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库 -->
			<property name="diaect" value="mysql" />
		</plugin>
	</plugins>
只需在mybatis.xml文件中加入插件配置,可以看得出插件其实是个拦截器,即,在调用数据接口时,拦截器会对sql语句进行二次编写(改写)。

二.数据层

dao层结构和Mybatis mapper文件

接口

public interface UserService {
	  /**
     * 查询某一个用户信息
     * @return
     */
	public User selectOne(String id);
	
	/**
	 * search all
	 * @return a list of user
	 */
	public List<User> selectAll();
}

mapper文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gree.dao.UserDao">
    <!-- 根据id查询得到一个user对象 -->
    <select id="selectOne" parameterType="int" resultType="com.gree.model.User">
        select *from tb_user where id=#{id};
    </select>
    <!-- 查询全部用户 -->
    <select id="selectAll" resultType="com.gree.model.User">
       select *from tb_user
    </select>
</mapper>

三.业务层(service层)

接口UserService.java

public interface UserService {
	  /**
     * 查询某一个用户信息
     * @return
     */
	public User selectOne(String id);
	
	/**
	 * search all
	 * @return a list of user
	 */
	public List<User> selectAll();
}

实现类UserServiceImple.java

public class UserServiceImpl implements UserService {
    
	@Autowired
	private UserDao userDao;
	
	@Override
	public User selectOne(String id) {
		// TODO Auto-generated method stub
		return userDao.selectOne(id);
	}

	@Override
	public List<User> selectAll() {
		// TODO Auto-generated method stub
		return userDao.selectAll();
	}
   
	//不带条件翻页
	public Page<User> selectAllLimit(Integer pageNum,Integer pageSize){
		//使用插件进行翻页
		PageHelper.startPage(pageNum,pageSize);
		//默认会对紧跟在后面的第一个数据库查询进行翻页
		List<User> list=this.selectAll();
		//需将查询到的结果list交给PageInfo(此时list中的数据是加了limit的部分数据,而非全部)
		PageInfo<User> info=new PageInfo<User>(list);
		//通过info属性可以以次获取:当前页,每页显示条数,总页数,总记录等。。。
		Page<User> page=new Page<User>(info.getPageNum(),info.getPageSize(),info.getPages(),(int)info.getTotal(),list);
		return page;
	}
}

在实现类中增加了PageHelper类行进插件翻页,同时用PageInfo类对翻页的一些必要数据进行计算封装。(在不使用翻页插件时,要手动计算一些必要的数据)。

四.Web层(Controller层)

UserController类

@Controller
public class UserController {
	
	@Autowired
	private UserServiceImpl userimpl;
	
	@RequestMapping(value="/getPage/{pageNum}/{pageSize}",method=RequestMethod.GET)
	@ResponseBody
	public Page<User> selectUserLimit(@PathVariable("pageNum") Integer pageNum,@PathVariable("pageSize") Integer pageSize){
		return userimpl.selectAllLimit(pageNum, pageSize);
	}
}

五.通过Postman调试接口,以及数据库日志

接口调试


数据库日志


通过日志可以看出插件已经编写了两条sql语句,select count(*), select *.......limit.而在mapper文件中我们只需要编写简单的select *from tb_user,即插件会对我们编写的sql语句进行二次编写。

六.总结

当使用了插件进行翻页时,省去了mapper文件多次编写查询语句(select count(*)...........)。以及在封装翻页工具类时的烦人计算,可以通过PageInfo直接获取。

一些插件注意事项,和细节:

GitHub

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值