Mybatis分页查询(通过SQL分页实现)
Mybatis分页查询(通过SQL分页实现)
前言
实现有哪几种方式:
网页分页
(一次查询所有数据,加载到网页,那么适合数量小的操作)
服务器端分页
数据库分页
请求一页数据,查询数据库即可
本文采用Oracle中的rownum实现分页,数据表使用Oracle中Scott的EMP表
一、搭建环境
目录结构
导入jar包
mybatis-3.2.7.jar
ojdbc6.jar数据库配置文件(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
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>
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分页实现)相关推荐
- mybatis mysql 分页sql语句_MySql实现分页查询的SQL,mysql实现分页查询的sql语句(转)...
http://blog.csdn.net/sxdtzhaoxinguo/article/details/51481430 摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通 ...
- mybatis 分页查询_MyBatis之分页查询:MyBatis PageHelper
MyBatis,作为目前流行的ORM框架,大大方便了日常开发.而对于分页查询,虽然可以通过SQL的limit语句实现,但是比较繁琐.而MyBatis PageHelper的出现,则解决了这一痛点.这里 ...
- MySql实现分页查询的SQL,mysql实现分页查询的sql语句 (转)
摘要:MySQL数据库实现分页查询的SQL语句写法! 一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了 ...
- oracle查询实现分页,Oracle实现分页查询的SQL语法汇总
本文实例汇总了Oracle实现分页查询的sql语法,整理给大家供大家参考之用,详情如下: 1.无ORDER BY排序的写法.(效率最高) 经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据 ...
- mybatis实现分页查询-自己封装分页方法
大致结构如下: 一.定义返回数据结构 创建返回数据结构主要是为了统一方便,和分页查询的关系并不大,也可以忽略这一步. package boc.ljh.config;import io.swagger. ...
- HQL查询(分页查询,动态sql查询,参数查询)
分页查询: 对dept表进行分页,每页显示三条数据,显示第一页,主要代码如下: 动态sql查询: 主要代码: 参数查询:(1.匿名占位符 2.参数名称绑定name 3.参数名称绑定对象属性): 主 ...
- java mybatis分页查询语句_mybatis分页查询的实现(一)
一.总结了mybatis中五种不同实现分页查询的方法 UserMapper.java接口文件 public interface UserMapper { //分页查询 public List sele ...
- mysql+分页脚本_MySql实现分页查询的SQL
一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的 ...
- oracle 与mysql查询_oracle与mysql分页查询语句sql
如果我们是通过JDBC的方式访问数据库,那么就有必要根据数据库类型采取不同的SQL分页语句,对于MySql数据库,我们可以采用limit语句进行分页,对于Oracle数据库,我们可以采用rownum的 ...
- sql oracle分页查询,【SQL】Oracle分页查询的三种方法-Oracle
[SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 [sql] select * from t_user t where ROWNUM <10; 按照学生ID排名 ...
最新文章
- All in one:如何搭建端到端可观测体系
- java date sql和_Java.util.date 与 java.sql.date区别和转换
- centos6.4 安装 mysql_CentOS6.4 安装MySQL
- Mysql之drop、delete、truncate的区别
- JavaScript——(function(){})()立即执行函数解析
- 使用Python搭建人脸识别考勤系统
- 微信添加好友查找失败服务器繁忙,微信加载联系人失败_微信添加好友失败有哪些原因...
- 使用get传参的时候,参数在后头获取不到或者出现别的错误。
- 黑苹果hidp显示不清楚_让黑苹果开启Retina的方法
- c++中char[]与char*的转换以及char*与数字互转
- laravel whereDoesntHave 查询不等于条件的数据
- 1人民币试用世纪互联azure虚拟机,跑CNN训练
- 单片机无线调试-看见心跳-手机显示心率波形
- 新款苹果手机_售价千元!苹果今日推出新款手机壳,买吗
- 卸载程序时遇到“请等待当前程序完成卸载或更改”
- 用户行为分析zhi应用分析模型
- 靶机渗透练习07-HackMyVm Area51 (Log4j2复现)
- LaTex科学论文写作
- Win10安装cuda10.1总是出错!别着急重装,看这篇文章
- python初学-爬取网页数据