本章目录
- 自定义sql
- 分页查询
1. 自定义sql
在dao文件中编写自定义接口,并在方法上使用注解形式注入SQL,如图所示:
第一种:


第二种
① application.yml加入下面配置
mybatis-plus:mapper-locations: com/ethan/mapper/*
② MemberMapper.java文件
public interface MemberMapper extends BaseMapper<Member> {List<Member> selectAllMembers(@Param(Constants.WRAPPER) Wrapper<Member> wrapper);
}
③ 新建MemberMapper.xml文件,内容如下:
<?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.ethan.dao.MemberMapper"><select id="selectAllMembers" resultType="com.ethan.entity.Member">select * from sys_member ${ew.customSqlSegment}</select>
</mapper>
注意select标签的id要与dao接口名称一致。
④ 代码中方法的调用跟第一种一样。
⑤ 如果出现报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ethan.dao.MemberMapper.selectAllMembers,在pom.xml文件中加入如下配置:
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes></resource></resources>
</build>
2. 分页查询
①MP提供的分页方法
首先进行分页插件配置,不配置分页插件,MP提供的分页方法会查全部,分页不生效。

下图演示了两种分页返回类型
第一种:以对象的形式输出每页的记录;第二种:以map集合的形式输出每页的记录。
在控制台中大家也能看到分页查询方法会执行两条sql,一条是查询总记录数,一条是查询每页数据;在有些场景中不需要查询总记录数的时候,IPage<Member> memberPage = new Page<>(1, 2,false)中第三个参数false为不查询总记录数,默认为true查询总记录数,可通过该参数进行设置。

②自定义分页方法
// MemberMapper.java中添加自定义分页查询接口IPage<Member> selectMemberPage(IPage<Member> page, @Param(Constants.WRAPPER) Wrapper<Member> wrapper);
// MemberMapper.xml中添加select语句
<select id="selectMemberPage" resultType="com.ethan.entity.Member">select * from sys_member ${ew.customSqlSegment}
</select>
使用自定的分页查询接口同样也会查询出来,跟MP提供的分页查询方法几乎一样。
