Mybatis 分页查询

本文介绍了一个使用MyBatis实现的分页查询案例,展示了如何通过XML映射文件定义复杂的SQL查询语句,并结合Java POJO类进行参数传递及结果集处理。案例中实现了基于物料编码、名称及规格的模糊搜索,并采用Row_Number()函数进行分页。
	<select id="getAllMateriel" resultType="Materiel" parameterType="Page">
		Select *,(select count(*) from Materiel_Info)as total FROM (
		select ROW_NUMBER()Over(order by MaterielCode desc) as rowId,* from Materiel_Info)
		as mytable
		<where> <if test="start !=null and end !=null">
				rowId between #{start} and #{end}
				</if>
				<if test="materielCode != null and materielCode !=''">
				AND materielCode like '%${materielCode}%'
				</if>
				<if test="materielName !=null and materielCode !=''">
				AND materielName like '%${materielName}%'
				</if>
				<if test="spec !=null and spec !=''">
				AND spec like '%${spec}%'
				</if>
 		</where>
	</select>


XXXXMapper.xml 文件如上

POJO类

Materiel.java

package com.dms.pojo;

public class Materiel {

	public Materiel() {
		super();
	}

	String MaterielCode;
	String MaterielName;
	String spec;
	String unit;
	float volume;
	float weight;
	String Note;
	String GroupCode;

	int total;	//总数

	public String getMaterielCode() {
		return MaterielCode;
	}

	public void setMaterielCode(String materielCode) {
		MaterielCode = materielCode;
	}

	public String getMaterielName() {
		return MaterielName;
	}

	public void setMaterielName(String materielName) {
		MaterielName = materielName;
	}

	public String getSpec() {
		return spec;
	}

	public void setSpec(String spec) {
		this.spec = spec;
	}

	public String getUnit() {
		return unit;
	}

	public void setUnit(String unit) {
		this.unit = unit;
	}

	public float getVolume() {
		return volume;
	}

	public void setVolume(float volume) {
		this.volume = volume;
	}

	public float getWeight() {
		return weight;
	}

	public void setWeight(float weight) {
		this.weight = weight;
	}

	public String getNote() {
		return Note;
	}

	public void setNote(String note) {
		Note = note;
	}

	public String getGroupCode() {
		return GroupCode;
	}

	public void setGroupCode(String groupCode) {
		GroupCode = groupCode;
	}

	public int getTotal() {
		return total;
	}

	public void setTotal(int total) {
		this.total = total;
	}

}


Page.java

package com.dms.pojo;

public class Page {
	public Page(){
		super();
	}
	
	String rp;  //显示条数
	String newp;//当前页码
	String key; //关键字
	String fields;//数据库字段
	int start;   //开始
	int end;     //结束
	String materielCode;//物料编码
	String materielName;//物料名称
	String spec;//规格型号
	
	public String getRp() {
		return rp;
	}

	public void setRp(String rp) {
		this.rp = rp;
	}

	public String getNewp() {
		return newp;
	}

	public void setNewp(String newp) {
		this.newp = newp;
	}

	public String getKey() {
		return key;
	}

	public void setKey(String key) {
		this.key = key;
	}

	public String getFields() {
		return fields;
	}

	public void setFields(String fields) {
		this.fields = fields;
	}

	public int getStart() {
		return start;
	}

	public void setStart(int start) {
		this.start = start;
	}

	public int getEnd() {
		return end;
	}

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

	public String getMaterielCode() {
		return materielCode;
	}

	public void setMaterielCode(String materielCode) {
		this.materielCode = materielCode;
	}

	public String getMaterielName() {
		return materielName;
	}

	public void setMaterielName(String materielName) {
		this.materielName = materielName;
	}

	public String getSpec() {
		return spec;
	}

	public void setSpec(String spec) {
		this.spec = spec;
	}
}


### MyBatis 分页查询的实现方式 MyBatis 提供了多种分页查询的方式,以下是两种常见且有效的实现方法: #### 方法一:基于数据库分页查询 通过 SQL 的 `LIMIT` 和 `OFFSET` 子句可以手动实现分页逻辑。这种方式适用于大多数关系型数据库,例如 MySQL、PostgreSQL 等。 以下是一个基于 MySQL 数据库的手动分页查询示例[^1]: ```sql SELECT * FROM table_name LIMIT #{pageSize} OFFSET #{offset}; ``` 在对应的 Mapper 文件中定义如下接口: ```java public List<YourEntity> selectByPage(@Param("pageSize") int pageSize, @Param("offset") int offset); ``` 调用时可以通过计算偏移量 (`offset`) 来获取指定页面的数据。 --- #### 方法二:使用 MyBatis 分页插件 MyBatis 官方推荐使用第三方分页插件(如 PageHelper),它可以简化分页操作并减少手写复杂 SQL 的工作量。该插件支持主流的关系型数据库,并能自动拦截 SQL 查询语句,在不修改原有 SQL 的情况下完成分页处理[^2]。 ##### 配置步骤 1. **引入依赖** 如果项目使用 Maven 构建,则需在 `pom.xml` 中添加 PageHelper 插件的依赖项: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.0</version> </dependency> ``` 2. **配置插件** 在 MyBatis 的核心配置文件中注册 PageHelper 插件: ```xml <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!-- 可选参数 --> <property name="reasonable" value="true"/> </plugin> </plugins> ``` 3. **代码示例** 使用 PageHelper 进行分页查询非常简单,只需在执行查询前调用其静态方法即可: ```java import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; public PageInfo<YourEntity> queryByPage(int pageNum, int pageSize) { // 设置分页参数 PageHelper.startPage(pageNum, pageSize); // 执行查询 List<YourEntity> list = yourMapper.selectAll(); // 获取分页结果对象 return new PageInfo<>(list); } ``` 上述代码会返回一个包含分页信息的对象 `PageInfo`,其中不仅包含了当前页数据,还提供了总记录数、总页数等辅助信息。 --- ### 总结 无论是采用原生 SQL 的手动分页还是借助于 PageHelper 插件,都可以满足不同场景下的分页需求。前者适合对性能有较高要求或者需要高度自定义的情况;后者则更适合快速开发和维护简单的分页功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值