文章目录
- 前言
- 一、
- 二、如何实现
- 1 配置mybatis plus分页插件
- 2.准备三张表
- 2.1 学生表
- 2.2 老师表
- 2.3 老师和学生Vo表
- 3. 编写SQL语句
- 4. 编写mapper层
- 5. service层
- 6.controller层
- 演示效果
- 【补充】 XML 自定义分页
- 总结
前言
没啥可说的
一、
没啥可说的
二、如何实现
1 配置mybatis plus分页插件
@Configuration
@MapperScan("com.breez.vote.mapper")
public class MybatispluConfig {/*** 配置分页插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}
2.准备三张表
2.1 学生表
@Data
@TableName("student")
public class Student implements Serializable {private Integer id;private String studentName;private Integer studentAge;
}
2.2 老师表
@Data
@TableName("teacher")
public class Teacher implements Serializable {private Integer id;private String teacherName;private Integer teacherAge;
}
2.3 老师和学生Vo表
💡这张表的数据来自老师和学生,用来保存来自多张表的数据。
/*** 学生和老师*/
@Data
public class QueryVo implements Serializable {/*** 学生名字*/private String studentName;/*** 学生年龄*/private Integer studentAge;/*** 老师姓名*/private String teacherName;/*** 老师年龄*/private Integer teacherAge;
}
3. 编写SQL语句
💡这里需要注意:写完SQL语句后,需要在结尾加上
${ew.customSqlSegment}
,查询参数,由mybatis plus
自动拼装。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.breez.vote.mapper.StudentMapper"><select id="findByPage" resultType="com.breez.vote.domain.vo.QueryVo">select * from student,teacher ${ew.customSqlSegment}</select></mapper>
4. 编写mapper层
public interface StudentMapper extends BaseMapper<Student> {/***自定义分页条件查询* @param page 分页参数* @param wrapper 查询参数* @return*/IPage<QueryVo> findByPage(IPage<QueryVo> page, @Param(Constants.WRAPPER) QueryWrapper<QueryVo> wrapper);
}
5. service层
public interface StudentService extends IService<Student> {/**** @param page 分页参数* @param queryWrapper 查询条件* @return 分页后的数据*/public IPage<QueryVo> findByPage(Page<QueryVo> page, QueryWrapper<QueryVo> queryWrapper);}
@Service
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements StudentService {@Resourceprivate StudentMapper queryMapper;/*** @param page 分页参数* @param queryWrapper 查询条件* @return 分页后的数据*/@Overridepublic IPage<QueryVo> findByPage(Page<QueryVo> page, QueryWrapper<QueryVo> queryWrapper) {return queryMapper.findByPage(page, queryWrapper);}
}
6.controller层
@RestController
@RequestMapping("data")
public class StudentController {@Autowiredprivate StudentService studentService;@GetMapping("query")public Object query() {Page<QueryVo> page = new Page<>(1, 2);IPage<QueryVo> queryVoPage = studentService.findByPage(page, new QueryWrapper<>());return queryVoPage;}
}
演示效果
✏️学生表【4条数据】
✏️ 老师表【3条数据】
💡这里出现这个结果原因(出现了
12
条数据【3*4=12
】)是我没有在SQL语句中写多表查询条件
,出现了笛卡尔积
,加上多表查询条件后就不会出现相同的了(李刚
)。
【补充】 XML 自定义分页
- UserMapper.java 方法内容
public interface UserMapper {//可以继承或者不继承BaseMapper/*** <p>* 查询 : 根据state状态查询用户列表,分页显示* </p>** @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象)* @param state 状态* @return 分页对象*/IPage<User> selectPageVo(Page<?> page, Integer state);
}
- UserMapper.xml 等同于编写一个普通 list 查询,mybatis-plus 自动替你分页
<select id="selectPageVo" resultType="com.baomidou.cloud.entity.UserVo">SELECT id,name FROM user WHERE state=#{state}
</select>
- UserServiceImpl.java 调用分页方法
public IPage<User> selectUserPage(Page<User> page, Integer state) {// 不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题,这时候你需要自己查询 count 部分// page.setOptimizeCountSql(false);// 当 total 为小于 0 或者设置 setSearchCount(false) 分页插件不会进行 count 查询// 要点!! 分页返回的对象与传入的对象是同一个return userMapper.selectPageVo(page, state);
}
总结
📖
一个字: 巴适