IBatis按条件分页查询
XML中代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="test">
<typeAlias alias="PAGES" type="com.xiao4r.crm.util.Pager"/>
<!-- 多条件查询 -->
<select id="loadPayQuery" resultClass="PayQuery" parameterClass="PAGES">
SELECT * FROM
(SELECT A.*, ROWNUM RN FROM
(SELECT * FROM jchome_uinion_multichannel) A
where A.cancelamount_status='1'
<!-- 属性值不为空时拼接查询语句 -->
<isNotEmpty prepend="AND" property="map.starttime">
A.pay_date > #map.starttime#
</isNotEmpty>
<isNotEmpty prepend="AND" property="map.endtime">
#map.endtime# >= A.pay_date
</isNotEmpty>
<isNotEmpty prepend="AND" property="map.source">
A.SOURCE=#map.source#
</isNotEmpty>
<isNotEmpty prepend="AND" property="map.service_name">
A.SERVICE_NAME=#map.service_name#
</isNotEmpty>
order by A.pay_date desc)
WHERE RN BETWEEN #pageSize#*(#currentPage#-1)+1 AND #pageSize#*#currentPage#
</select>
<select id="totalRowsAll" resultClass="java.lang.Integer" parameterClass="java.util.Map">
select count(*) from jchome_uinion_multichannel
where cancelamount_status='1'
<isNotEmpty prepend="AND" property="starttime">
pay_date > #starttime#
</isNotEmpty>
<isNotEmpty prepend="AND" property="endtime">
#object.endtime# >= pay_date
</isNotEmpty>
<isNotEmpty prepend="AND" property="source">
SOURCE=#source#
</isNotEmpty>
<isNotEmpty prepend="AND" property="service_name">
SERVICE_NAME=#service_name#
</isNotEmpty>
</select>
</sqlMap>
Pager.java 类
package com.xiao4r.crm.util;
import java.util.List;
import java.util.Map;
public class Pager<T> {
private int totalRows = 0; // 总行数
private int pageSize = 10; // 每页显示的行数,默认值为10
private int currentPage = 1; // 当前页号
private int totalPages = 0; //总页数
private List<T> results;// 此页查询出的结果
private String param;//查询条件字符串
//传递参数那里本来准备用 泛型来手机参数,但是在xml文件中 点出查询属性 报错:找不到object 对应属性值,所以后来采用map集合来接受多个参数
private T object;//查询条件字符串
//多条件查询可用map集合来接受参数
private Map<Object, Object> map;
public void setPageInfo(int totalRows){
this.setTotalRows(totalRows);
this.totalPages = totalRows / pageSize + (totalRows % pageSize == 0 ? 0 : 1);
}
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 int getTotalPages() {
return totalPages;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public int getTotalRows() {
return totalRows;
}
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}
public List<T> getResults() {
return results;
}
public void setResults(List<T> results) {
this.results = results;
}
public boolean canShowFirst() {
if (this.currentPage == 1 || this.totalPages == 0)
return false;
return true;
}
public boolean canShowLast() {
if (this.currentPage == this.totalPages || this.totalPages == 0)
return false;
return true;
}
public boolean canShowPrevious() {
if (this.currentPage == 1 || this.totalPages == 0)
return false;
return true;
}
public boolean canShowNext() {
if (this.currentPage == this.totalPages || this.totalPages == 0)
return false;
return true;
}
public String getParam() {
return param;
}
public void setParam(String param) {
this.param = param;
}
public T getObject() {
return object;
}
public void setObject(T object) {
this.object = object;
}
public Map<Object, Object> getMap() {
return map;
}
public void setMap(Map<Object, Object> map) {
this.map = map;
}
}
//Dao调用类
package com.xiao4r.crm.dao.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ibatis.SqlMapClientTemplate;
import org.springframework.stereotype.Repository;
import com.xiao4r.crm.dao.PayQueryDao;
import com.xiao4r.crm.model.PayQuery;
import com.xiao4r.crm.util.Pager;
@Repository("payqueryDao")
public class PayQueryDaoImpl implements PayQueryDao {
@Autowired
private SqlMapClientTemplate sqlMapClient;
/*
* 分页查询
*/
@Override
public Pager<PayQuery> loadPayQuery(Pager<PayQuery> pager) {
Integer totalRows=(Integer)sqlMapClient.queryForObject("payquery.totalRowsAll",pager.getMap());
List<PayQuery> results=sqlMapClient.queryForList("payquery.loadPayQuery",pager);
pager.setResults(results);
pager.setPageInfo(totalRows);
return pager;
}
}
IBatis按条件分页查询的更多相关文章
- asp.net mvc多条件+分页查询解决方案
开发环境vs2010 css:bootstrap js:jquery bootstrap paginator 原先只是想做个mvc的分页,但是一般的数据展现都需要检索条件,而且是多个条件,所以就变成了 ...
- 【java】spring-data-jpa 集成hibernate实现多条件分页查询
初次接触spring-data-jpa,实现多条件分页查询. 基础环境 Spring Boot+spring-data-jpa+hibernate+mysql 1.接口 要继承这个接口,这个接口提供了 ...
- thinkphp 带条件分页查询
thinkphp 带条件分页查询:form表单传值时候,method='get'. 用 get 传值
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
- ASPNETCOREAPI 跨域处理 SQL 语句拼接 多条件分页查询 ASPNET CORE 核心 通过依赖注入(注入服务)
ASPNETCOREAPI 跨域处理 AspNetCoreApi 跨域处理 如果咱们有处理过MV5 跨域问题这个问题也不大. (1)为什么会出现跨域问题: 浏览器安全限制了前端脚本跨站点的访问资源, ...
- EasyUi+Spring Data 实现按条件分页查询
Spring data 介绍 Spring data 出现目的 为了简化.统一 持久层 各种实现技术 API ,所以 spring data 提供一套标准 API 和 不同持久层整合技术实现 . 自己 ...
- Hibernate查询,返回new对象(注意这个新定义的类要有构造函数),使用sql带条件分页查询并且把结果显示到一个对象的集里面的解决方案
IIndexDao package com.ucap.netcheck.dao; import com.ucap.netcheck.combination.beans.IndexCombinat ...
- JPA实现复杂条件分页查询
相信熟悉Hibernate的人对于ORM给编程带来的便利于快捷一定不陌生,相对于MyBatis等需要编写复杂的SQL语句,ORM映射为我们带来的便利显而易见.但是,在获得便利的同时,失去的便是灵活性, ...
- springboot+thymeleaf+pageHelper带条件分页查询
html层 <div> <a class="num"><b th:text="'共 '+ ${result.resultMap['pages ...
随机推荐
- Vundle的安装
1.Vundle.vim 安装 https://github.com/VundleVim/Vundle.vim 2.插件安装https://github.com/yangyangwithgnu/use ...
- 提高MYSQL百万条数据的查询速度
提高MYSQL百万条数据的查询速度 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 nul ...
- 7.1WebApi2的异常处理
这篇文章描述错误和异常处理在 ASP.NET Web API. HttpResponseException 如果 Web API 控制器引发未捕获的异常,会发生什么?默认情况下,大多数异常被转译为 H ...
- oracle中 SELECT INTO 和INSERT INTO ... SELECT区别
在Oracle中,将一张表的数据复制到另外一个对象中.通常会有这两种方法:insert into select 和 select into from. 前者可以将select 出来的N行(0到任意数 ...
- T-SQL 语句的理解
1.T-SQL中各子句在逻辑上按照以下顺序进行处理 . . . .. .ORDER BY 查询实例: SELECT EMPID, YEAR(ORDERDATE) AS ORDERYEAR, COUNT ...
- Codeforces 696 C. PLEASE
Description 三个杯子,一开始钥匙在中间,每次等概率的选择两边的两个,与中间的交换,问第 \(n\) 次选择中间的杯子是钥匙的概率是多少. \(n=\sum_{i=1}^{k} a_i,a_ ...
- 【原创】Redux 卍解
Redux 卍解 Redux - Flux设计模式的又一种实现形式. 说起Flux,笔者之前,曾写过一篇<ReFlux细说>的文章,重点对比讲述了Flux的另外两种实现形式:『Facebo ...
- Nginx概念及基础安装--详细讲解
1.主要内容: Nginx的基础 特性 配置部署 优化(了解) 2.Nginx 是什么? Nginx是一个开源的,支持高性能,高并发的www ...
- Hotaru's problem(hdu 5371)
题意:给出一个数字串,询问最长的子串,满足以下要求:将子串平均分为三部分,一三部分相等,一二部分对衬. /* 在manachar的基础上,枚举回文串的中心,再找第三部分. */ #include< ...
- 关于Ajax工作原理
1.ajax技术的背景 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax ...