# MyBatisPlus —— 分页插件
官网:https://baomidou.com/guide/page.html
# 1. 创建工程
# 2. 导入 maven 依赖坐标
# 2.1 MyBatisPlus
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
# 2.2 Druid
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
# 3. 创建数据库 mybatisplus 并建表 tbl_user
# 4. 配置数据库
server:
port: 8080
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatisplus?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF8&useSSL=false
username: root
password: root
# 5. 创建实体类 User
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@EqualsAndHashCode(callSuper = false)
@TableName(value = "tbl_user")
public class User {
@TableId(value = "id",type = IdType.AUTO)
private Integer id;
private String name;
}
# 6. 编写数据访问接口类 UserMapper
//可以不继承 BaseMapper,如果继承的话就可以使用 MyBatisPlus 自带的一些基础的增删改查功能
public interface UserMapper extends BaseMapper<User> {
/**
* 分页查询用户,需要传入一个参数 page
* page 有以下属性:
* records:查询到的记录的具体信息
* total:总数,默认0
* size:当前页面大小,默认10
* current:当前页面页码,默认1
* orders:排序字段信息
* optimizeCountSql:自动优化 COUNT SQL,默认true
* isSearchCount:是否进行 count 查询,默认true
* hitCount:是否命中count缓存,默认false
*
* 我们在使用的时候,主要是传两个参数:① 当前页码;② 页面大小;③ 排序规则(有必要的话)
*/
IPage<User> selectUserByPage(Page<?> page);
}
# 7. 编写 UserMapper 的映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hedon.dao.UserMapper">
<!--
这里只需要写普通的 SQL 语句就可以了, MyBatisPlus 会帮我们自动封装成分页查询
-->
<select id="selectUserByPage" resultType="com.hedon.bean.User">
select id,name from tbl_user
</select>
</mapper>
# 8. 编写服务层 UserService
这里就省略写 IUserService 接口再写接口实现类 UserServiceImpl 了,直接就写 UserService 类了。
@Service
public class UserService {
//注入数据访问层 UserMapper 对象
@Autowired
private UserMapper userMapper;
//分页查询
public IPage<User> selectUserByPage(Integer pageNum, Integer pageSize){
//指定页码和页面大小
Page<User> page = new Page(pageNum,pageSize);
return userMapper.selectUserByPage(page);
}
}
# 9. 注入分页插件 PaginationInterceptor
@Configuration //标注这是一个配置类
@MapperScan(value = "com.hedon.**") //指定扫描的包
public class MyBatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor(){
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
//当要查询的页码超过最大页码的时候,跳转到查询首页
paginationInterceptor.setOverflow(true);
return paginationInterceptor;
}
}
# 10. 测试
//注入服务层 UserService 对象
@Autowired
private UserService userService;
@Test
public void testSelectUserByPage(){
//分页查询返回的对象为 IPage 类型的
IPage<User> userIPage = userService.selectUserByPage(3, 5);
//IPage 对象中有很多属性,下面举例几个最常用的
System.out.println("总记录数:" + userIPage.getTotal());
System.out.println("总页数:" + userIPage.getPages());
System.out.println("当前页面大小:" + userIPage.getSize());
System.out.println("当前页码:" + userIPage.getCurrent());
//最重要的 => 取出查询到的数据
System.out.println(" =============== 数据 =================");
List<User> records = userIPage.getRecords();
for (User user : records){
System.out.println(user);
}
}
← 9. 逆向工程 面试题丨MyBatis →