mysql分页查询

#进阶8:分页查询 ★
/*

应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求
语法:
	select 查询列表
	from 表
	【join type join 表2
	on 连接条件
	where 筛选条件
	group by 分组字段
	having 分组后的筛选
	order by 排序的字段】
	limit 【offset,】size;
	
	offset要显示条目的起始索引(起始索引从0开始)
	size 要显示的条目个数
特点:
	①limit语句放在查询语句的最后
	②公式
	要显示的页数 page,每页的条目数size
	
	select 查询列表
	from 表
	limit (page-1)*size,size;
	
	size=10
	page  第一条记录编号
	1	  0
	2  	  10
	3	  20
	
*/
#案例1:查询前五条员工信息


SELECT * FROM  employees LIMIT 0,5;
SELECT * FROM  employees LIMIT 5;


#案例2:查询第11条——第25条
SELECT * FROM  employees LIMIT 10,15;


#案例3:有奖金的员工信息,并且工资较高的前10名显示出来
SELECT 
    * 
FROM
    employees 
WHERE commission_pct IS NOT NULL 
ORDER BY salary DESC 
LIMIT 10 ;

计算分页查询的页码

//数据库记录数目
int totalsize
//页码数目 
int totalno
//每页记录数
int pagesize
if(totalsize%pagesize==0){
    totalno=totalsize/pagesize;
}else{
    totalno=totalsize/pagesize+1;
}

 

分页查询java代码

 1.分页对象

package com.atguigu.atcrowdfunding.bean;

import java.util.List;

public class Page<T> {

	private List<T> datas;
	private int pageno;
	private int totalno;
	private int totalsize;
	public List<T> getDatas() {
		return datas;
	}
	public void setDatas(List<T> datas) {
		this.datas = datas;
	}
	public int getPageno() {
		return pageno;
	}
	public void setPageno(int pageno) {
		this.pageno = pageno;
	}
	public int getTotalno() {
		return totalno;
	}
	public void setTotalno(int totalno) {
		this.totalno = totalno;
	}
	public int getTotalsize() {
		return totalsize;
	}
	public void setTotalsize(int totalsize) {
		this.totalsize = totalsize;
	}
	
	
}

2.公共返回数据模型

package com.atguigu.atcrowdfunding.bean;

public class AJAXResult {

	private boolean success;
	private Object data;

	public boolean isSuccess() {
		return success;
	}

	public void setSuccess(boolean success) {
		this.success = success;
	}

	public Object getData() {
		return data;
	}

	public void setData(Object data) {
		this.data = data;
	}
	
}

3.controller方法

	@ResponseBody
	@RequestMapping("/pageQuery")
	public Object pageQuery( String queryText, Integer pageno, Integer pagesize ) {
		
		AJAXResult result = new AJAXResult();
		
		try {
			
			// 分页查询
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("start", (pageno-1)*pagesize);
			map.put("size", pagesize);
			map.put("queryText", queryText);
			
			List<User> users = userService.pageQueryData( map );
			// 当前页码			
			// 总的数据条数
			int totalsize = userService.pageQueryCount( map );
			// 最大页码(总页码)
			int totalno = 0;
			if ( totalsize % pagesize == 0 ) {
				totalno = totalsize / pagesize;
			} else {
				totalno = totalsize / pagesize + 1;
			}
			
			// 分页对象
			Page<User> userPage = new Page<User>();
			userPage.setDatas(users);
			userPage.setTotalno(totalno);
			userPage.setTotalsize(totalsize);
			userPage.setPageno(pageno);
			
			result.setData(userPage);
			result.setSuccess(true);
		} catch ( Exception e ) {
			e.printStackTrace();
			result.setSuccess(false);
		}
		
		return result;
		
	}

4.service,dao

package com.atguigu.atcrowdfunding.service;

import java.util.List;
import java.util.Map;

import com.atguigu.atcrowdfunding.bean.User;

public interface UserService {

	List<User> pageQueryData(Map<String, Object> map);

	int pageQueryCount(Map<String, Object> map);

}




package com.atguigu.atcrowdfunding.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Select;

import com.atguigu.atcrowdfunding.bean.User;

public interface UserDao {
	
	List<User> pageQueryData(Map<String, Object> map);

	int pageQueryCount(Map<String, Object> map);
}

5.mapper

<select id="pageQueryData" resultType="com.atguigu.atcrowdfunding.bean.User">
        select
            *
        from t_user
        <where>
            <if test="queryText != null">
            and loginacct like concat('%', #{queryText}, '%')
            </if>
        </where>
        order by createtime desc
        limit #{start}, #{size}
    </select>
    
    <select id="pageQueryCount" resultType="int">
        select
            count(*)
        from t_user
        <where>
            <if test="queryText != null">
            and loginacct like concat('%', #{queryText}, '%')
            </if>
        </where>
    </select>

 

MySQL页查询是指在查询结果集中,根据指定的起始位置和每页显示的记录数,返回对应的记录。常见的MySQL分页查询方法有两种:使用LIMIT关键字和使用子查询。 第一种方法是使用LIMIT关键字,其语法为:SELECT * FROM table LIMIT m, n。其中m表示起始位置,n表示每页显示的记录数。引用中提到,该查询方法能够实现分页,但m越大,查询性能就越低,因为MySQL需要扫描全部m+n条记录。 第二种方法是使用子查询,其语法为:SELECT * FROM (SELECT * FROM table LIMIT m, n) AS t。这种方法相比第一种方法,性能更强,尤其是当m的值较大时。引用指出,由于内部的子查询只扫描了id字段,而非全表,所以性能要强于第一种方法,并且能够解决跨页查询问题。 综上所述,MySQL分页查询可以通过使用LIMIT关键字或者子查询来实现。具体选择哪种方法取决于查询的需求和性能要求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [MySQL分页查询的5种方法](https://blog.csdn.net/m0_67391401/article/details/126062208)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [mysql 数据库分页查询详细讲解](https://blog.csdn.net/m0_37449634/article/details/128903042)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值