mysql数据库中使用mybatis的xml文件limit分页使用遇到的坑

本文介绍了在MySQL数据库中,使用mybatis的XML文件进行limit分页查询时可能遇到的问题及解决方法。作者强调了limit语句中参数a和b的正确理解,即a表示从第a+1条开始,b表示查询的条数。并给出了正确的分页计算公式:a = (当前页 - 1) * 每页记录数。同时,分享了使用fastjson进行分页数据封装的代码示例。
摘要由CSDN通过智能技术生成

数据库:MySQL数据库

因为初次使用mybatis-plus的分页查询,有点不太不习惯,于是决定自己写个分页查询。

mysql中的分页查询语句,是使用limit来分页的:

select * from tablename  limit a,b;//这句话的意思是从表tablename中查询,从第a+1条开始,共查询b条数据。

那么在这里,a和b的含义就要了解明白了,要不然就容易犯我的错(我刚开始理解的意思是,从a页开始,查询b条数据)。

概念清晰的话,涉及到分页,就需要了解几个计算公式了:

//总记录数=查询符合条件的总数 SELECT COUNT(1) FROM tablename WHERE 条件;
Integer count ;
//每页记录数=每页查询的条数,一般都是前端传过来的
Integer pageSize ;
//当前页数=当前页数,一般都是前端传过来的想要查询的哪页
Integer currPage ;
//总页数= (总记录数 + 每页记录数 - 1)/每页记录数
Integer totalPage = (count + pageSize - 1) / pageSize;

明白上面的几个概念之后,可以进行操作了。

请注意,sql语句不能写成:select * from tablename  limit currPage ,pageSize ;//这是错误的

应该计算一下select * from tablename  limit a,b;语句中的a(一定要注意,a不代表第几页,而是代表从a&#

MyBatis Plus 的 XML 配置文件可以用于实现一对一或多对一关联关系下的分页查询,对于一对多(ManyToOne 或者 OneToMany),你可以通过以下步骤完成: 1. **映射关系**:首先,在实体类(Entity),你需要在目标实体类上设置 `@TableId` 和 `@TableField` 注解,而在关联的实体类上,通常会有一个 `@OneToOne` 或 `@OneToMany` 关联字段。 ```java // 主体类(User) @Table(name = "user") public class User { @TableId(value = "id", type = IdType.AUTO) private Long id; // 其他字段... @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "department_id") private Department department; // 这里假设有一个部门关联 } // 关联类(Department) @Table(name = "department") public class Department { @TableId(value = "id", type = IdType.AUTO) private Long id; // 其他字段... } ``` 2. **分页查询**:在 SQL 映射 XML 文件,你可以编写一个动态 SQL 查询语句,包括 LIMIT 和 OFFSET 用于分页。例如: ```xml <select id="selectDepartmentsByUser" resultType="Department"> SELECT * FROM department WHERE user_id = #{userId} ORDER BY id ASC <if test="offset != null and limit != null"> LIMIT #{offset}, #{limit} </if> </select> ``` 这里,`${offset}` 和 `${limit}` 是 MyBatis 的参数占位符,可以在调用方法时传入当前页数和每页大小。 3. **调用方法**:在 Service 层或 Controller ,你可以使用 `BaseMapper` 或自定义的 Mapper 接口提供的分页查询方法,并传入用户 ID 和页码信息: ```java List<Department> departments = departmentMapper.selectDepartmentsByUser(userId, page, size); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值