mybatis分页查询插件

2017-04-26 09:32

昨天发现一个超级好用的插件,简单记录下用法,当然也可以直接去看文档链接在这里分页查询插件使用 PageHelper 你只需要在 classpath 中包含 pagehelper-x.x.x.jar 和 jsqlparser-0.9.5.jar。

如果你使用 Maven,你只需要在 pom.xml 中添加下面的依赖:

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

配置拦截器插件
在 MyBatis 配置 xml 中配置拦截器插件

<!--
 plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
 properties?, settings?,
 typeAliases?, typeHandlers?,
 objectFactory?,objectWrapperFactory?,
 plugins?,
 environments?, databaseIdProvider?, mappers?
-->
<plugins>
    <!-- com.github.pagehelper为PageHelper类所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
        <property name="param1" value="value1"/>
    </plugin>
</plugins>

或者
在 Spring 配置文件中配置拦截器插件

使用 spring 的属性配置方式,可以使用 plugins 属性像下面这样配置:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <!-- 注意其他配置 -->
  <property name="plugins">
    <array>
      <bean class="com.github.pagehelper.PageInterceptor">
        <property name="properties">
          <!--使用下面的方式配置参数,一行配置一个 -->
          <value>
            **params=value1**
          </value>
        </property>
      </bean>
    </array>
  </property>
</bean>

其中属性配置需要根据自己的使用场景配置,配置好就可以在程序用使用了
controller中的method

 /*前台获取foods列表,而且实现分页*/
    @RequestMapping(value = "/selectByPageNumSize",method = RequestMethod.GET)
    public String getList(Model model,
                                @RequestParam(required = false, defaultValue = "1") int page,
                                @RequestParam(required = false, defaultValue = "6") int rows) {
        int pageNum;
        Integer total=foodService.selectTotalFood();
        if(total%rows!=0){
            pageNum=total/rows+1;
        }else{
            pageNum=total/rows;
        }
        List<Food> foods = foodService.selectByFood( page, rows);
        model.addAttribute("foods",foods);
        model.addAttribute("page", page);
        model.addAttribute("rows", rows);
        model.addAttribute("total",total);
        model.addAttribute("pageNum",pageNum);
        return  "forward:../before/detail/caidan.jsp";
    }

Service中对selectByFood的实现

   public List<Food> selectByFood(int page, int rows) {

        //分页查询 只需要在要执行分页查询的sql语句前执行即可实现分页查询
        PageHelper.startPage(page, rows);
        return foodMapper.listAllFoods();
    }

page是1 pageSize默认是6

DEBUG [http-apr-8080-exec-8] - ==> Preparing: select * from food ,foodtype where food.foodType_id=foodtype.id LIMIT 6
DEBUG [http-apr-8080-exec-8] - ==> Parameters:
DEBUG [http-apr-8080-exec-8] - <== Total: 6

page是2 pageSize默认是6

DEBUG [http-apr-8080-exec-9] - ==> Preparing: select * from food ,foodtype where food.foodType_id=foodtype.id LIMIT 6,6
DEBUG [http-apr-8080-exec-9] - ==> Parameters:
DEBUG [http-apr-8080-exec-9] - <== Total: 6

这里用的mysql数据库,当然啦这个插件还支持的数据库文档中可以看到,是不是超好用?!