Springboot-mybatis-pageHelper分页功能实现

IDE:IDEA;

JDK:1.8;

springboot:1.5.9.RELEASE;

首先是基于springBoot和mybatis的项目,在pom.xml中添加依赖:

 

<!--pagehelper -->
<dependency>
   <groupId>com.github.pagehelper</groupId>
   <artifactId>pagehelper-spring-boot-starter</artifactId>
   <version>1.1.1</version>
</dependency>

pom.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>com.example</groupId>
   <artifactId>demo2</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>demo2</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.9.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
   </properties>

   <dependencies>

      
      <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>jstl</artifactId>
         <version>1.2</version>
      </dependency>
      <dependency>
         <groupId>org.apache.tomcat.embed</groupId>
         <artifactId>tomcat-embed-jasper</artifactId>
         <!--<scope>provided</scope>-->
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>5.1.40</version>
         <scope>runtime</scope>
      </dependency>

      <!--pagehelper -->
      <dependency>
         <groupId>com.github.pagehelper</groupId>
         <artifactId>pagehelper-spring-boot-starter</artifactId>
         <version>1.1.1</version>
      </dependency>

      <dependency>
         <groupId>org.mybatis.spring.boot</groupId>
         <artifactId>mybatis-spring-boot-starter</artifactId>
         <version>1.3.1</version>
      </dependency>

      <!-- Provided -->
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-tomcat</artifactId>
         <scope>provided</scope>
      </dependency>
      <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>fastjson</artifactId>
         <version>1.2.28</version>
      </dependency>

   </dependencies>

   


   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>


</project>
 

我是基于注解的mybatis:

application.properties配置如下

####访问端口#####
server.port=8222

#连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/databasename?characterEncoding=utf-8
#数据库账户
spring.datasource.username=username
#数据库密码
spring.datasource.password=password
#数据库驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

#pagehelper分页插件配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
 

接下来在userMapper中添加分页查询语句

 

import com.example.demo.pojo.User;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.*;

@Mapper
public interface UserMapper {
   
    /**
     * 分页查询数据
     * @return
     */
    @Select("select id , userName , homeTel, homeAddress from T_USER")
    Page<User> findByPage();
}
 

接下来是userService

 

import com.example.demo.pojo.User;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;

/**
 * Created by qs on 2018/4/10.
 */
public interface UserService {

    public Page<User> findByPage(int pageNo, int pageSize);
}
 

userServiceImpl

 

import com.example.demo.mapper.UserMapper;
import com.example.demo.pojo.PageInfo;
import com.example.demo.pojo.User;
import com.example.demo.service.UserService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;

/**
 * Created by qs on 2018/4/10.
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    
    @Override
    public Page<User> findByPage(int pageNo, int pageSize) {
        PageHelper.startPage(pageNo, pageSize);
        return userMapper.findByPage();
    }

}
 

实现类里是把当前页和页数设置进了PageHelper;所以UserMaper中的查询语句就是简单的查询所有就可以了;

Controller中调用

 

import com.alibaba.fastjson.JSON;
import com.example.demo.pojo.PageInfo;
import com.example.demo.pojo.User;
import com.example.demo.service.FeginClient;
import com.example.demo.service.UserService;
import com.github.pagehelper.Page;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import static org.apache.coyote.http11.Constants.a;


/**
 * Created by qs on 2018/4/3.
 */
@RequestMapping("/user")
@RestController
@EnableAutoConfiguration
public class UserController {

   

    @Autowired
    private UserService userService;

    private final static Logger logger = LoggerFactory.getLogger(apiController.class);

    /**
     * 分页查询
     * @return
     */
    @RequestMapping(value = "/userpage/{pageNo}/{pageSize}", method = RequestMethod.GET)
    public String findUserByPageMethod(@PathVariable int pageNo,@PathVariable int pageSize){
        try{
            Page<User> users = userService.findByPage(pageNo,pageSize);
            PageInfo<User> pageInfo = new PageInfo<>(users);
            return JSON.toJSONString(pageInfo);
        }catch (Exception e){
            e.printStackTrace();
            return "findByPage-error";
        }
    }

}
 

 

用法:不用写连接数据库等多余代码(在ConnLink.java文件中修改一下相关属性就可以了,如果不想写分页,在ConnLink.java文件中DBlink()方法可以返回一个Statement对象,然后就可以利用这个返回值去写你想要的代码了),只要建立一个Page对象,调用SelectRS()方法,将SQL语句当前页码和每页要显示的条数正确的写入。SelectRS()会自动返回一个结果集rs,然后用rs遍历输出结果。用getFrist()、getBack()、getLast()、getNext()等方法进行取得上一页的页码,下一面的页码就可以了。 看了之后是不是很心动呢~~~ HOHO~~其实我的代码有很多不足,例如:是不是可以做成通用的分页?也可以把DBlink()中的conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jiuzhou","root","123456");用的连接参数写在xml中生成一个JAR包,这样才更有扩展性,你说呢~~。希望高手能继续改良,让这段代码更精一些。HOHO~~~~改完之的一定要发到网上供大家参考和使用。 刚刚才发现Page.java文件是空的,在这里我就加上吧!实在是不好意思了 package com.SpreadPage; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import com.DateBase.*; public class Page extends ConnLink{ private Statement stmt=null; private ResultSet rs=null; private int row=0; private int num=0; private int page=0; private int list=0; //搜索去向 搜索条件 当前第几页 每页条数 public ResultSet SelectRS(String select,int page_num,int page) { this.num=page_num; this.page=page; String sql=select+" limit "+(page_num*page)+","+(page_num*page+page); //System.out.println(sql); try { stmt=DBlink(); rs=stmt.executeQuery(select); rs.first(); rs.last(); this.row=rs.getRow(); System.out.println(sql); if(rs!=null) { rs.close(); } if(stmt==null) { System.out.println("Stmt无连接"); return null; } rs=stmt.executeQuery(sql); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return rs; } //获得总记录数 public int getRow() { return row; } //第一页 public int getFrist() { return 0; } //最后一页 public int getBack() { if(getRow()%page==0) { return getRow()/page; } return (getRow()/page)+1; } //上一页 public int getLast() { if(num<=0) { return 0; } return (num-1); } //下一页 public int getNext() { int back=getBack(); if(num>=back) { return num; } return (num+1); } //当前页的条数 public int getNow() { try { rs.first(); rs.last(); list=rs.getRow(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } //当前第几页 public int getPage() { int sum=(num*page-page)+1; if(getRow()<sum) return 0; return sum; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值