动态sql实现分页查询

1.创建实体类对象需要查询的条件com.rl.ecps.model.QueryCondition

  private Long brandId;
  private Short auditStatus;
  private Short showStatus;
  private String itemName;
  private Integer pageNo;
  private Integer startNum;
  private Integer endNum;

2.查询语句

查询条数:

<select id="selectItemByConditionCount" parameterType="com.rl.ecps.model.QueryCondition" resultType="int">
select count(*) from eb_item t
<where>
<if test="brandId != null">
t.brand_id = #{brandId}
</if>
<if test="auditStatus != null">
and t.audit_status = #{auditStatus}
</if>
<if test="showStatus != null">
and t.show_status = #{showStatus}
</if>
<if test="itemName != null and itemName != ‘‘">
and t.item_name like ‘%${itemName}%‘
</if>
</where>
</select>

分页查询:

<select id="selectItemByCondition" parameterType="com.rl.ecps.model.QueryCondition" resultMap="BaseResultMap">
select *
from (select rownum rw, a.*
from (
select * from eb_item t
<where>
<if test="brandId != null">
t.brand_id = #{brandId}
</if>
<if test="auditStatus != null">
and t.audit_status = #{auditStatus}
</if>
<if test="showStatus != null">
and t.show_status = #{showStatus}
</if>
<if test="itemName != null and itemName != ‘‘">
and t.item_name like ‘%${itemName}%‘
</if>
</where>
order by t.item_id desc
<![CDATA[
) a
where rownum < #{endNum}) b
where b.rw > #{startNum}
]]>
</select>

3.分页实体类

public class Page {

/**
* 当前页码 (已知)
*/
private int pageNo = 1;

/**
* 每页记录数(已知)
*/
private int pageSize = 5;

/**
* 指定的查询条件下的总记录数
*/
private int totalCount = 0;

/**
* 指定的查询条件下的总页数
*/
private int totalPage = 1;

/**
* 查询的开始行号
*/
private int startNum = 0;

/**
* 查询的结束行号
*/
private int endNum = 0;

/**
* 查询的结果集
*/
private List<?> list;

4.service与control

service实现:

public Page selectItemByQC(QueryCondition qc) {
//查询当前的查询条件下的总记录数
int totalCount = itemDao.selectItemByConditionCount(qc);
//创建page对象
Page page = new Page();
page.setPageNo(qc.getPageNo());
page.setTotalCount(totalCount);
//计算startNum和endNum
Integer startNum = page.getStartNum();
Integer endNum = page.getEndNum();
//把值设置给sql的查询对象
qc.setStartNum(startNum);
qc.setEndNum(endNum);
//查询结果集
List<EbItem> itemList = itemDao.selectItemByCondition(qc);
page.setList(itemList);
return page;
}

public void saveItem(EbItem item, EbItemClob itemClob,
List<EbParaValue> paraList, List<EbSku> skuList) {
itemDao.saveItem(item);
itemClobDao.saveItemClob(itemClob, item.getItemId());
paraDao.saveParaValue(paraList, item.getItemId());
skuDao.saveSku(skuList, item.getItemId());
}

controller类:

@RequestMapping("/listItem.do")
public String listItem(QueryCondition qc, Model model){
List<EbBrand> bList = brandService.selectBrandAll();
model.addAttribute("bList", bList);
if(qc.getPageNo() == null){
qc.setPageNo(1);
}
Page page = itemService.selectItemByQC(qc);
model.addAttribute("page", page);
//把qc写回去,目的是回显
model.addAttribute("qc", qc);
return "item/list";
}

原文地址:https://www.cnblogs.com/ljllove/p/9201254.html

时间: 2024-11-29 07:15:28

动态sql实现分页查询的相关文章

[.NET] SQL数据分页查询

[.NET] SQL数据分页查询 程序下载 范例下载:点此下载 原始码下载:点此下载 NuGet封装:点此下载 数据查询 开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据. SELECT Id, Name FROM Users 数据分页查询 当数据量过多时,系统会需要采用分页的方式来分批取得数据.这时可以改写原有的SQL查询指令,在其中加入ROW_NUMBER(),来为每笔资料打上编号.后续依照系统需求,取得某个编号范围内的数据,就完成在系统中提供数据分页查询的功能.(

MyBatis动态sql和分页

MyBatis动态sql 在接口中定义方法 然后alt加回车在xml中如图: 1.if 语句 (简单的条件判断) 2. choose (when,otherwize) ,相当于java 语言中的 switch ,与 jstl 中的choose 很类似 3. trim (对包含的内容加上 prefix,或者 suffix 等,前缀,后缀) 4. where (主要是用来简化sql语句中where条件判断的,能智能的处理 and or ,不必担心多余导致语法错误). 5. set (主要用于更新时)

mybatis动态sql以及分页

1.mybatis动态sql 2.模糊查询 3.查询返回结果集的处理 4.分页查询 5.特殊字符处理 1.mybatis动态sql If.trim.foreach If 标签判断某一字段是否为空 <select id="list4" resultType="java.util.Map" parameterType="java.util.Map"> select * from t_mvc_book <where> <i

动态sql和分页

Mybatis动态SQL If.trim.foreach BookMapper 1 /** 2 * 如果形参要在mapper.xml中使用需要加上面注解 3 * map.name: zs age: 12 4 * @param bookIds 5 * @return 6 */ 7 List<Book> selectBooksIn(@Param("bookIds") List bookIds); BookService 1 List<Book> selectBook

MyBatis框架(三)动态SQL,分页,二进制存入数据库图片

一.动态sql语句,分页 1, <if>条件 <if test="key!=null"> 拼接sql语句 </if> 2, <choose><when><otherwise> 注意:只能执行一个分支 <choose> <when test="key=='value'"> 拼接sql语句 </when> <when test="key=='val

Mybatis学习笔记-动态SQL与模糊查询

需求:实现多条件查询用户(姓名模糊匹配, 年龄在指定的最小值到最大值之间) User.java实体类 public class User { private int id; private String name; private int age; //... } ConditionUser.java public class ConditionUser { private String name; private int minAge; private int maxAge; //... }

07_动态SQL与模糊查询

1 需求 实现多条件查询用户 姓名模糊匹配 年龄在指定的最小值到最大值之间 2 准备表和数据 create table d_user( id int primary key auto_increment, name varchar(10), age int(3) ); insert into d_user(name,age) values('Tom',12); insert into d_user(name,age) values('Bob',13); insert into d_user(na

MyBatis入门(二)—— 输入映射和输出映射、动态sql、关联查询

p.p4 { margin: 0.0px 0.0px 0.0px 10.0px; font: 10.5px "PingFang SC" } p.p6 { margin: 0.0px 0.0px 0.0px 21.0px; font: 10.0px "Courier New"; color: #4f76cb } p.p7 { margin: 0.0px 0.0px 0.0px 21.0px; font: 10.0px "Courier New" }

SQL 存储过程 分页查询

ALTER PROCEDURE [dbo].[gzProc_TablePage] @tablename varchar(MAX),--表名 @selcolumn varchar(MAX),--查询字段 @where varchar(MAX),--where条件 @sortcolumn varchar(MAX),--排序字段 @pagecount int,--每页记录数 @pageindex int--页号ASBEGIN /*************************************