Mybatis分页插件PageHelper

简介:
在使用Java Spring开发的时候,Mybatis算是对数据库操作的利器了。不过在处理分页的时候,Mybatis并没有什么特别的方法,一般需要自己去写limit子句实现,成本较高。好在有个PageHelper插件,可以非常便利快速的帮我们实现分页。
1、POM依赖
Mybatis的配置就不多提了。PageHelper的依赖如下。需要新的版本可以去maven上自行选择.

<dependency>    
    <groupId>com.github.pagehelper</groupId>  
    <artifactId>pagehelper</artifactId>     
    <version>4.1.4</version>
</dependency>

2、Mybatis对PageHelper的配置
打开Mybatis配置文件,一般在Resource路径下。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> 
<configuration>
<!-- 全局参数 -->
    <settings>   
    <!-- 使全局的映射器启用或禁用缓存。 -->    
    <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 -->   
        <setting name="lazyLoadingEnabled" value="true"/>   
        <!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载。 -->   
        <setting name="aggressiveLazyLoading" value="true"/>   
        <!-- 是否允许单条sql 返回多个数据集  (取决于驱动的兼容性) default:true -->     
        <setting name="multipleResultSetsEnabled" value="true"/>    
        <!-- 是否可以使用列的别名 (取决于驱动的兼容性) default:true -->   
        <setting name="useColumnLabel" value="true"/>   
        <!-- 允许JDBC 生成主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。  default:false  -->  
        <!-- 指定 MyBatis 如何自动映射 数据基表的列 NONE:不隐射 PARTIAL:部分  FULL:全部  -->    
        <setting name="autoMappingBehavior" value="PARTIAL"/>   
        <!-- 这是默认的执行类型  (SIMPLE: 简单; REUSE: 执行器可能重复使用prepared statements语句;BATCH: 执行器可以重复执行语句和批量更新)  -->  
        <!-- 使用驼峰命名法转换字段。 -->    
        <setting name="mapUnderscoreToCamelCase" value="true"/>    
        <setting name="localCacheScope" value="SESSION"/>  
    <plugins>    
        <plugin interceptor="com.github.pagehelper.PageHelper"> 
            <property name="dialect" value="mysql"/>       
            <property name="rowBoundsWithCount" value="false"/> 
            <property name="pageSizeZero" value="true"/>      
            <property name="supportMethodsArguments" value="false"/>  
            <property name="returnPageInfo" value="none"/>  
        </plugin>
    </plugins>
</configuration> 

这里要注意的是PageHelper相关的配置。
如果你没有加载Mybatis配置文件,那么使用的是Mybatis默认的配置。如何加载Mybatis配置文件呢?
到你的dataSrouce配置中。
在配置sqlSessionFactory的时候,指定Mybatis核心配置文件和mapper的路径,代码如下
 

@Bean(name = "mrHanSqlSessionFactory")
@Primary
public SqlSessionFactory mrHanSqlSessionFactory(@Qualifier("mrHanData") DataSource dataSource) throws Exception {    
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); 
    bean.setDataSource(dataSource);   
    bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis-mapper/*.xml"));    
    return bean.getObject();
} 

注意:
这里配置的mapper.xml存放路径,在Resource/mybatis-mapper文件夹下
这里配置的mybatis-config.xml文件,在Resource/下。
3、分页
代码演示:

@RequestMapping(value = "/query", method = RequestMethod.POST)    
@ResponseBody    
public ResponseEntity<Response> queryFence(@RequestBody QueryParam queryParam) {        
    try {            
        Map<String, Object> data = new HashMap<>();            
        Integer pageNum = queryParam.getPageNum()!=null?queryParam.getPageNum():1;            
        Integer pageSize = queryParam.getPageSize()!=null?queryParam.getPageSize():10;            
        Page page = PageHelper.startPage(pageNum, pageSize, true);            
        List<MrHan> list = mrHanMapper.query(queryParam);            
        data.put("total", page.getTotal());            
        data.put("nowPage", pageNum);            
        data.put("data", list);            
        return new ResponseEntity<>(                    
            new Response(ResultCode.SUCCESS, "查询MrHan成功", data), HttpStatus.OK);        
    } catch (Exception e) {            
        logger.error("查询MrHan失败", e);            
        return new ResponseEntity<>(
                new Response(ResultCode.EXCEPTION, "查询MrHan失败", null),
                HttpStatus.INTERNAL_SERVER_ERROR);        
      }    
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值