MyBatis学习总结_12_Mybatis+Mysql分页查询

package cn.tsjinrong.fastfile.util;

/**
 * @ClassName: Page
 * @Description: TODO(分页组件的父类,用来封装分页的 通用内容和逻辑)
 * @author zhanghaiyang
 * @date 2016年1月14日 下午12:37:55
 * @Copyright © 2016上海通善互联网金融信息服务有限公司
 */
public class Page {

// 用户输入的分页条件
private int currentPage = 1; // 当前页
private int pageSize = 15; // 每页最大行数

// 用于实现分页SQL的条件,是根据用户输入条件计算而来的
private int begin;
private int end;

// 自动计算出的总行数
private int rows;
// 根据总行数计算总页数,然后将总页数输出给页面
private int totalPage;

public int getRows() {
return rows;
}

public void setRows(int rows) {
this.rows = rows;
}

public int getTotalPage() {
// 根据总行数,计算总页数
if (rows % pageSize == 0) {
totalPage = rows / pageSize;
} else {
totalPage = rows / pageSize + 1;
}
return totalPage;
}

public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}

public int getBegin() {
// 在mapper.xml使用begin属性时,对其进行计算
begin = (currentPage - 1) * pageSize;
return begin;
}

public void setBegin(int begin) {
this.begin = begin;
}

public int getEnd() {
// 在mapper.xml使用end属性时,对其进行计算
end = currentPage * pageSize + 1;
return end;
}

public void setEnd(int end) {
this.end = end;
}

public int getCurrentPage() {
return currentPage;
}

public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}

public int getPageSize() {
return pageSize;
}

public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}

}

public ModelAndView findVideosByPage(HttpServletRequest request, HttpServletResponse response, FileProperties fp) {

ModelAndView model = new ModelAndView("/video/video_list");
Map<String, Object> params = new HashMap<String, Object>(3);
if (StringUtils.isNotBlank(fp.getBusiId())) {
params.put("busiId", fp.getBusiId());
}
if (StringUtils.isNotBlank(fp.getApplyName())) {
params.put("applyName", fp.getApplyName());
}
if (fp.getApplyDateStart() != null && StringUtils.isNotBlank(fp.getApplyDateStart())) {
params.put("applyDateStart", DateUtil.parseDate(fp.getApplyDateStart()));
} else {
params.put("applyDateStart", DateUtil.addDay(new Date(), -7));
}
if (fp.getApplyDateEnd() != null && StringUtils.isNotBlank(fp.getApplyDateEnd())) {
params.put("applyDateEnd", DateUtil.parseDate(fp.getApplyDateEnd()));
} else {
params.put("applyDateEnd", DateUtil.format(new Date()));
}
fp.setRows(fastfileVideoService.selectRows(params));
model.addObject("fastfileVideoInfoPage", fp);
List<FastfileVideoInfo> fastfileVideoInfos = fastfileVideoService.selectByPage(fp);
model.addObject("fastfileVideoInfos", fastfileVideoInfos);
model.addObject("applyDateStart", DateUtil.format(DateUtil.addDay(new Date(), -7)));
model.addObject("applyDateEnd", DateUtil.format(new Date()));
return model;
}

<select id="selectByPage" resultMap="BaseResultMap" parameterType="cn.tsjinrong.fastfile.util.FileProperties">
select
<include refid="Base_Column_List" />
from fastfile_video_info where 1=1
<if test="busiId != null and busiId !=‘‘">
and busi_id = #{busiId,jdbcType=VARCHAR}
</if>
<if test="applyName != null and applyName !=‘‘">
and apply_name=#{applyName,jdbcType=VARCHAR}
</if>
<if test="applyDateStart != null and applyDateStart !=‘‘">
and apply_date &gt;= #{applyDateStart,jdbcType=DATE}
</if>
<if test="applyDateEnd != null and applyDateEnd !=‘‘">
and apply_date &lt;= #{applyDateEnd,jdbcType=DATE}
</if>
and del_flag = 0
order by apply_date desc limit #{beginRow},#{pageSize}
</select>
时间: 2024-12-21 04:07:45

MyBatis学习总结_12_Mybatis+Mysql分页查询的相关文章

mybatis学习笔记(11)-多对多查询

mybatis学习笔记(11)-多对多查询 mybatis学习笔记11-多对多查询 示例 多对多查询总结 resultMap总结 本文实现多对多查询,查询用户及用户购买商品信息. 示例 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表:orders.orderdetail.items sql SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdeta

mybatis学习笔记(11)-一对多查询

mybatis学习笔记(11)-一对多查询 mybatis学习笔记11-一对多查询 示例 小结 本文实现一对多查询,查询订单及订单明细的信息 示例 sql 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.item

sql server 与 mysql 分页查询以及创建临时表的区别

一: 分页查询的时候 sql server使用的是top关键字,而mysql 使用的是limit e.g: 查询第五个到第十个入职的职员 sql server2000: select top 6 * from emp where empno not in (select top 4 empno from emp order by hiredate) order by hiredate; mysql: select * from emp order by hire date limit 4,6;

MyBatis使用(二)分页查询

由于MyBatis没有相关的分页查询,因此抽取出hibernate的分页查询功能,通过过滤器,对本地sql方言进行区分,对sql语句进行拼接和封装 步骤分为:1.先查询出总数   2.通过拼接的sql再去查询相关信息 /** * 带有分页信息的查询 * @param sqlMapId mybatis映射id * @param pageRequest 分页请求参数信息 * @return */ @SuppressWarnings({ "rawtypes", "unchecked

mysql分页查询语法

一.limit语法 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数.LIMIT 接受一个或两个数字参数.参数必须是一个整数常量.如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目. 初始记录行的偏移量是 0(而不是 1); mysql> SELECT * FROM table LIMIT 5,10; // 检索记

MySQL分页查询性能优化

当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询.对于数据库分页查询,也有很多种方法和优化的点.下面简单说一下我知道的一些方法. 准备工作 为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明. 表名:order_history 描述:某个业务的订单历史表 主要字段:unsigned int id,tinyint(4) int type 字段情况:该表一共37个字段,不包含text等大型数组,最大为varcha

MySql分页查询慢|这里告诉你答案

一.背景 我们在开发的过程中使用分页是不可避免的,通常情况下我们的做法是使用limit加偏移量:select * from table where column=xxx order by xxx limit 1,20.当数据量比较小时(100万以内),无论你翻到哪一页,性能都是很快的.如果查询慢,只要在where条件和order by 的列上加上索引就可以解决.但是,当数据量大的时候(小编遇到的情况是500万数据),如果翻到最后几页,即使加了索引,查询也是非常慢的,这是什么原因导致的呢?我们该如

(记录)mysql分页查询,参数化过程的坑

在最近的工作中,由于历史遗留,一个分页查询没有参数化,被查出来有sql注入危险,所以对这个查询进行了参数化修改. 一看不知道,看了吓一跳,可能由于种种原因,分页查询sql是在存储过程中拼接出来的,where之后的条件也是在代码中先进行拼接,然后作为整体参数在传入存储过程里,在存入过程里又进行一次拼接.这样的话就有sql注入的潜在危险,尽管在拼接where之前进行的查询条件的验证. 大家都明白,参数化是防止sql注入的有效方法,然后就对这个分页查询进行大刀阔斧的改革. 思路一:1.对原先的代码中拼

mysql 分页查询 limit

每次都会忘掉limit,记录下来. 分页查询(limit 起始行,查询几行) -- 起始行从0开始 -- 分页:当前页  每页显示多少条 -- 分页查询当前页的数据的sql: SELECT * FROM student LIMIT (当前页-1)*每页显示多少条,每页显示多少条; -- 需求: 查询第1,2条记录(第1页的数据) SELECT * FROM student LIMIT 0,2; -- 查询第3,4条记录(第2页的数据) SELECT * FROM student LIMIT 2,