栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

详解Mybatis分页插件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

详解Mybatis分页插件

这里说最好用,绝对不是吹的,不过有好多人都不理解为什么要用这个插件,自己手写分页sql不是挺好吗......

所以我特地写这样一个例子来讲为什么最好用。

假设我们已经写好了Mapper的接口和xml,如下:

public interface SysLoginLogMapper { 
   
  List findSysLoginLog(@Param("logip") String logip, 
     @Param("username") String username, 
     @Param("loginDate") String loginDate, 
     @Param("exitDate") String exitDate, 
     @Param("logerr") String logerr); 
 
} 
 
 
 
  
  select * from sys_login_log a 
   
   left join sys_user b on a.userid = b.userid 
   
   
    
    a.logip like '%'||#{logip}||'%' 
    
    
    and (b.username like '%'||#{username}||'%' or b.realname like '%'||#{username}||'%') 
    
    
    and to_date(substr(a.logindate,0,10),'yyyy-MM-dd') = to_date(#{loginDate},'yyyy-MM-dd') 
    
    
    and to_date(substr(a.EXITDATE,0,10),'yyyy-MM-dd') = to_date(#{exitDate},'yyyy-MM-dd') 
    
    
    and a.logerr like '%'||#{logerr}||'%' 
    
   
  order by logid desc 
  
 

虽然是举个简单例子,但是这里的xml并没那么简单。

如果你已经有一些例如上面这些现成的Mybatis方法了,我现在想对这个查询进行分页,我该怎么办呢?

如果是手写SQL,我需要增加两个接口,一个查询count总数,一个改为分页形式的。需要在xml中,复制粘贴,然后改改语句,似乎也不是很难。你是这样做的吗?

如果使用这个插件,我需要做什么呢???

对Mybatis已经写好的这些方法来说,我什么都不需要改。

但是Service层可能需要动一下。具体上面这个例子。看下面的Service层调用代码。

不需要分页时候的代码:

public List findSysLoginLog(String loginIp, 
String username, 
String loginDate, 
String exitDate, 
String logerr) throws BusinessException { 
  return sysLoginLogMapper.findSysLoginLog(loginIp, username, loginDate, exitDate, logerr); 
} 

增加分页功能之后的代码:

public PageHelper.Page findSysLoginLog(String loginIp, 
String username, 
String loginDate, 
String exitDate, 
String logerr, 
int pageNumber, 
int pageSize) throws BusinessException { 
  PageHelper.startPage(pageNumber,pageSize); 
  sysLoginLogMapper.findSysLoginLog(loginIp, username, loginDate, exitDate, logerr); 
  return PageHelper.endPage(); 
} 

相比较而言:

返回值从List改成了PageHelper.Page

入参增加了两个,pageNumber和pageSize

然后过程代码中,先调用了

PageHelper.startPage(pageNumber,pageSize); 

startPage是告诉拦截器说我要开始分页了。分页参数是这两个。

然后调用原来的Mybatis代码:

sysLoginLogMapper.findSysLoginLog(loginIp, username, loginDate, exitDate, logerr); 

这里没有接收返回值,会不会觉得奇怪?实际上PageHelper已经自动接收了返回值。通过下面的代码可以取出返回值:

PageHelper.endPage(); 

同时endPage告诉拦截器说我结束分页了,不需要你了。

你觉得这样的代码简单还是手写sql简单呢?

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/148313.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号