Mybatis分页查询(通过SQL分页实现)

前言

实现有哪几种方式:

  1. 网页分页

    (一次查询所有数据,加载到网页,那么适合数量小的操作)

  2. 服务器端分页

    java程序中查询所有数据,网页需要哪一页,就给哪一页数据,会撑爆java服务器,建议查询缓存优化

  3. 数据库分页

    请求一页数据,查询数据库即可

本文采用Oracle中的rownum实现分页,数据表使用Oracle中Scott的EMP表

一、搭建环境

目录结构

  1. 导入jar包

    mybatis-3.2.7.jar
    ojdbc6.jar

  2. 数据库配置文件(db.properties)

    db.driver=oracle.jdbc.driver.OracleDriver
    db.url=jdbc:oracle:thin:@10.25.164.149:1521:orcl
    db.username=scott
    db.password=123456
    
  3. mybatis-config.xml

    <environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${db.driver}"/><property name="url" value="${db.url}"/><property name="username" value="${db.username}"/><property name="password" value="${db.password}"/></dataSource></environment></environments><mappers><!-- 这是映射文件,一个表一个,我们的sql就写在这里 --><mapper resource="config/EmpMapper.xml"/></mappers>
    </configuration>
  4. MybatisUtils.java

    package net.neuedu.mybatis3.util;import java.io.IOException;
    import java.io.InputStream;import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class MybatisUtils {private static SqlSessionFactory sqlSessionFactory;static{String resource = "config/mybatis-config.xml";InputStream inputStream=null;try {inputStream = Resources.getResourceAsStream(resource);} catch (IOException e) {e.printStackTrace();}finally{}sqlSessionFactory= new SqlSessionFactoryBuilder().build(inputStream);}public static SqlSession getSqlSession(){SqlSession sqlSession=null;sqlSession=sqlSessionFactory.openSession();return sqlSession;}}
    

二、创建实体类

Emp.java

package net.neuedu.mybatis3.domain;import java.math.BigDecimal;
import java.util.Date;public class Emp {private Integer empno;​    private String ename;​    private String job;​    private Short mgr;​    private Date hiredate;​    private BigDecimal sal;​    private BigDecimal comm;//  private Short deptno;​      ​    public Integer getEmpno() {​       return empno;
​   }​  @Override
​   public String toString() {​       return "Emp [empno=" + empno + ", ename=" + ename + ", job=" + job+ ", mgr=" + mgr + ", hiredate=" + hiredate + ", sal="+ sal + ", comm=" + comm + "]";}public void setEmpno(Integer empno) {this.empno = empno;}public String getEname() {return ename;}​    public void setEname(String ename) {​        this.ename = ename == null ? null : ename.trim();
​    }​    public String getJob() {​        return job;
​    }​    public void setJob(String job) {​        this.job = job == null ? null : job.trim();
​    }​    public Short getMgr() {​        return mgr;
​    }​    public void setMgr(Short mgr) {​        this.mgr = mgr;
​    }​    public Date getHiredate() {​        return hiredate;
​    }​    public void setHiredate(Date hiredate) {​        this.hiredate = hiredate;
​    }​    public BigDecimal getSal() {​        return sal;
​    }​    public void setSal(BigDecimal sal) {​        this.sal = sal;
​    }​    public BigDecimal getComm() {​        return comm;
​    }​    public void setComm(BigDecimal comm) {​        this.comm = comm;
​    }//        public Short getDeptno() {//          return deptno;
//      }
//
//      public void setDeptno(Short deptno) {//          this.deptno = deptno;
//      }
}

三、EmpMapper接口

public interface EmpMapper {/*** 查询员工表中一共有多少条数据* @return*/
public Integer selectSize();/*** 分页查询* @param pageUtil* @return*/
public List<Emp> selectEmpByPage(PageUtil pageUtil);}

四、分页工具类

PageUtil.java

package net.neuedu.mybatis3.domain;/*** 具体功能:告诉他每页显示几条数据,和一共有多少数据,还有显示第几页数据,它帮我们算出需要分多少页,每页的起始索引* @author hp**/
public class PageUtil {public final static int PAGECOUNT=3;//每页显示几条数据   3private int pageNumber;//显示第几页数据  1private int size;// 一共有多少条数据   3private int startIndex;//对应页面开始的索引 includeprivate int endIndex;//对应页面结束的索引      不包含private int pageNums;//一共有多少页@Overridepublic String toString() {return "PageUtil [pageCount=" + PAGECOUNT + ", pageNumber="+ pageNumber + ", size=" + size + ", startIndex=" + startIndex+ ", endIndex=" + endIndex + ", pageNums=" + pageNums + "]";}/*** 构造方法:需要三个参数,每页显示几条数据,一共有多少条数据,显示第几页数据* @param pageCount* @param size* @param pageNumber*/public PageUtil(int pageCount,int size,int pageNumber){//根据参数给对应属性赋值this.pageNumber=pageNumber;this.size=size;//帮我们算出需要分多少页,每页的起始索引this.pageNums=size%pageCount==0?size/pageCount:size/pageCount+1;this.startIndex=this.PAGECOUNT*(pageNumber-1)+1;//0if(pageNumber==pageNums)//如果请求页码刚好是最后一页,那么结束索引要好好计算一下{this.endIndex=size;}else {this.endIndex=this.PAGECOUNT*pageNumber; }//处理pageNumber=0的情况if(pageNumber==0){this.startIndex=0;this.endIndex=0;}}public static void main(String[] args) {PageUtil pageUtil=new PageUtil(10, 3,1);//13页, 10-20System.out.println(pageUtil);}public int getPageNumber() {return pageNumber;}public void setPageNumber(int pageNumber) {this.pageNumber = pageNumber;}public int getSize() {return size;}public void setSize(int size) {this.size = size;}public int getStartIndex() {return startIndex;}public void setStartIndex(int startIndex) {this.startIndex = startIndex;}public int getEndIndex() {return endIndex;}public void setEndIndex(int endIndex) {this.endIndex = endIndex;}public int getPageNums() {return pageNums;}public void setPageNums(int pageNums) {this.pageNums = pageNums;}
}

五、SQL实现分页

EmpMapper.xml

<?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="net.neuedu.mybatis3.mapper.EmpMapper"><!--查询员工表中一共有多少条数据 public Integer selectSize(); --><select id="selectSize" resultType="Integer">select count(1) from emp</select><!-- /**    * 分页查询    * @param pageUtil    * @return    */   -->      <select id="selectEmpByPage" parameterType="PageUtil" resultType="Emp"> select ee.*      from      (select e.*,rownum rn from emp e       where rownum<![CDATA[<=]]>#{endIndex}) ee      where ee.rn>=#{startIndex}   </select>
</mapper>

测试

package test;import java.util.List;import net.neuedu.mybatis3.domain.Emp;
import net.neuedu.mybatis3.domain.PageUtil;
import net.neuedu.mybatis3.mapper.EmpMapper;
import net.neuedu.mybatis3.util.MybatisUtils;import org.apache.ibatis.session.SqlSession;public class TestPageSQL {public static void main(String[] args) {SqlSession sqlSession=MybatisUtils.getSqlSession();EmpMapper mapper=sqlSession.getMapper(net.neuedu.mybatis3.mapper.EmpMapper.class);//查询员工表中一共有多少条数据Integer size=mapper.selectSize();//实例化分页工具类,它会帮我们算出开始索引和结束索引PageUtil pageUtil=new PageUtil(3, size, 5);//分页查询List<Emp> list=mapper.selectEmpByPage(pageUtil);System.out.println(list.toString());sqlSession.close();}}

测试结果


[

Mybatis分页查询(通过SQL分页实现)相关推荐

  1. mybatis mysql 分页sql语句_MySql实现分页查询的SQL,mysql实现分页查询的sql语句(转)...

    http://blog.csdn.net/sxdtzhaoxinguo/article/details/51481430 摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通 ...

  2. mybatis 分页查询_MyBatis之分页查询:MyBatis PageHelper

    MyBatis,作为目前流行的ORM框架,大大方便了日常开发.而对于分页查询,虽然可以通过SQL的limit语句实现,但是比较繁琐.而MyBatis PageHelper的出现,则解决了这一痛点.这里 ...

  3. MySql实现分页查询的SQL,mysql实现分页查询的sql语句 (转)

    摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了 ...

  4. oracle查询实现分页,Oracle实现分页查询的SQL语法汇总

    本文实例汇总了Oracle实现分页查询的sql语法,整理给大家供大家参考之用,详情如下: 1.无ORDER BY排序的写法.(效率最高) 经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据 ...

  5. mybatis实现分页查询-自己封装分页方法

    大致结构如下: 一.定义返回数据结构 创建返回数据结构主要是为了统一方便,和分页查询的关系并不大,也可以忽略这一步. package boc.ljh.config;import io.swagger. ...

  6. HQL查询(分页查询,动态sql查询,参数查询)

    分页查询: 对dept表进行分页,每页显示三条数据,显示第一页,主要代码如下: 动态sql查询: 主要代码: 参数查询:(1.匿名占位符  2.参数名称绑定name  3.参数名称绑定对象属性): 主 ...

  7. java mybatis分页查询语句_mybatis分页查询的实现(一)

    一.总结了mybatis中五种不同实现分页查询的方法 UserMapper.java接口文件 public interface UserMapper { //分页查询 public List sele ...

  8. mysql+分页脚本_MySql实现分页查询的SQL

    一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的 ...

  9. oracle 与mysql查询_oracle与mysql分页查询语句sql

    如果我们是通过JDBC的方式访问数据库,那么就有必要根据数据库类型采取不同的SQL分页语句,对于MySql数据库,我们可以采用limit语句进行分页,对于Oracle数据库,我们可以采用rownum的 ...

  10. sql oracle分页查询,【SQL】Oracle分页查询的三种方法-Oracle

    [SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 [sql] select * from t_user t where ROWNUM <10; 按照学生ID排名 ...

最新文章

  1. All in one:如何搭建端到端可观测体系
  2. java date sql和_Java.util.date 与 java.sql.date区别和转换
  3. centos6.4 安装 mysql_CentOS6.4 安装MySQL
  4. Mysql之drop、delete、truncate的区别
  5. JavaScript——(function(){})()立即执行函数解析
  6. 使用Python搭建人脸识别考勤系统
  7. 微信添加好友查找失败服务器繁忙,微信加载联系人失败_微信添加好友失败有哪些原因...
  8. 使用get传参的时候,参数在后头获取不到或者出现别的错误。
  9. 黑苹果hidp显示不清楚_让黑苹果开启Retina的方法
  10. c++中char[]与char*的转换以及char*与数字互转
  11. laravel whereDoesntHave 查询不等于条件的数据
  12. 1人民币试用世纪互联azure虚拟机,跑CNN训练
  13. 单片机无线调试-看见心跳-手机显示心率波形
  14. 新款苹果手机_售价千元!苹果今日推出新款手机壳,买吗
  15. 卸载程序时遇到“请等待当前程序完成卸载或更改”
  16. 用户行为分析zhi应用分析模型
  17. 靶机渗透练习07-HackMyVm Area51 (Log4j2复现)
  18. LaTex科学论文写作
  19. Win10安装cuda10.1总是出错!别着急重装,看这篇文章
  20. python初学-爬取网页数据

热门文章

  1. java常用的库_java有哪些常用的库
  2. java被安全阻止解决及用友Uclient安装
  3. 电话自动拨号在电脑上自动拨打
  4. Eclipse自动生成返回值对象
  5. urlhelper 使用教程
  6. AIDE手机编程初级教程(零基础向) 3.2.2 设计欢迎页(补充)
  7. linux 卸载jdk和安装 -凌晨的光
  8. 一套功能强大的点云数据处理软件!
  9. 超级详细的软件著作权登记所需的软件说明书撰写模板及步骤
  10. 基于ssm java医院病历管理系统