PageHelper
MyBatis 使用第三方插件对功能进行扩展,分页助手 PageHelper 是将分页的复杂操作进行封装,使用简单的方式即可获得分页的相关数据。PageHelper 是一个用于 MyBatis 或 MyBatis-Plus 的分页插件,它提供了简单易用的分页功能。它通过拦截 SQL 查询,在查询时自动添加分页条件,从而实现数据的分页查询。
基本功能
PageHelper 可以帮助我们在使用 MyBatis 时自动进行分页查询,避免手动编写复杂的分页逻辑。它通过拦截器的方式,在执行查询时动态地将分页参数传入 SQL 语句,并通过设置分页对象来获取分页结果。
工作原理
PageHelper 的核心功能是通过拦截器修改 SQL,添加分页的参数。它在查询执行前,会根据提供的分页参数修改原始的 SQL 查询,添加 LIMIT、OFFSET 等分页条件,然后返回分页结果。分页信息通过 Page 类提供,分页对象封装了总记录数、总页数等信息。
开发步骤
- 导入通用 PageHelper 的坐标
- 在 MyBatis 核心配置文件中配置 PageHelper 插件
- 测试分页数据获取
导入pom
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>3.5.1</version>
</dependency>
插件配置
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql"/>
</plugin>
代码实现
public class WzkicuPage01 {
public static void main(String[] args) throws Exception {
InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
PageHelper.startPage(2, 1);
List<WzkUser> dataList = userMapper.findAll();
for (WzkUser wzk : dataList) {
System.out.println(wzk);
}
}
}
执行结果
WzkUser(id=2, username=wzk2, password=icu2, birthday=Mon Nov 11 00:00:00 CST 2024, orderList=null, roleList=null)
配置 PageHelper
在 Spring 配置文件中配置 PageHelper 插件,通常是在 application.properties 或 application.yml 文件中:
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
PageInfo类
PageInfo 是 PageHelper 用于封装分页查询结果的一个重要类。它包含了分页相关的信息:
getTotal():总记录数getPages():总页数getPageNum():当前页码getPageSize():每页大小getList():当前页的数据
注意事项
- 在使用 PageHelper 时,分页查询必须放在调用
PageHelper.startPage()之后,执行查询之前 - 如果使用了 @Mapper 注解的 Mapper 接口,PageHelper 可以自动与 MyBatis 配合工作
- 对于需要分页的查询,返回的结果必须是一个 List 类型
通用 mapper
简单介绍
通用 mapper 就是为了解决单表的增删改查,基于 MyBatis 的插件机制,开发人员不需要编写 SQL,不需要在 DAO 中增加方法,只要写好实体类,就可以有增删改查方法。
引入依赖
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.5.1</version>
</dependency>
设置主键
@Table(name = "wzk_user")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class WzkUser implements Serializable {
private int id;
private String username;
private String password;
private Date birthday;
private List<WzkOrder> orderList;
private List<WzkRole> roleList;
}
修改DAO
public interface UserMapper extends Mapper<WzkUser> {
// 省略之前的内容
}
编写代码
public class WzkMapper01 {
public static void main(String[] args) throws Exception {
InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
MapperHelper mapperHelper = new MapperHelper();
mapperHelper.registerMapper(UserMapper.class);
mapperHelper.processConfiguration(sqlSession.getConfiguration());
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<WzkUser> dataList = userMapper.selectAll();
for (WzkUser each : dataList) {
System.out.println(each);
}
sqlSession.close();
}
}
执行结果
WzkUser(id=0, username=wzk2, password=icu2, birthday=Mon Nov 11 00:00:00 CST 2024, orderList=null, roleList=null)
Example 用法
public class WzkMapper02 {
public static void main(String[] args) throws Exception {
InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
MapperHelper mapperHelper = new MapperHelper();
mapperHelper.registerMapper(UserMapper.class);
mapperHelper.processConfiguration(sqlSession.getConfiguration());
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Example example = new Example(WzkUser.class);
example.createCriteria().andEqualTo("username", "wzk2");
List<WzkUser> dataList = userMapper.selectByExample(example);
for (WzkUser each : dataList) {
System.out.println(each);
}
sqlSession.close();
}
}
执行结果
WzkUser(id=0, username=wzk2, password=icu2, birthday=Mon Nov 11 00:00:00 CST 2024, orderList=null, roleList=null)