第一步: 在src/java/com.huanf.mybatisplus目录下右键,新建config.MyBatisPlusConfig类。由于MyBatisPlusConfig类是配置类,所以之前在MyBatisplusApplication类的 配置(其实就一个@MapperScan注解)就可以剪切到MyBatisPlusConfig类。在MyBatisPlusConfig类写入如下:
//这个注解表示该类是配置类
"com.huanf.mybatisplus.mapper")//该注解用于扫描mapper接口所在的包,是从MyBatisplusApplication类剪切过来的 (
public class MyBatisPlusConfig {
//通过MybatisPlusInterceptor拦截器来配置MyBatis-Plus中的分页插件
public MybatisPlusInterceptor zidingyi_mybatisPlusInterceptor(){
//先创建MybatisPlusInterceptor拦截器的对象,创建出来的对象就是插件对象
MybatisPlusInterceptor zidingyi_interceptor = new MybatisPlusInterceptor();
//addInnerInterceptor表示内部插件,PaginationInnerInterceptor表示分页插件,DbType.MYSQL表示数据库类型是MySQL
zidingyi_interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
//返回你创建好的插件对象
return zidingyi_interceptor;
//如何测试,也就是如何写功能,在src/test/java/com.huanf.mybatisplus目录下新建MyBatisPlusPluginsTest测试类,具体代码见MyBatisPlusPluginsTest类
}
}
第二步: 在src/test/java/com.huanf.mybatisplus目录下新建MyBatisPlusPluginsTest测试类,写入如下:
public class MyBatisPlusPluginsTest {
//自动装配的注解,用于使用我们写的UserService接口
private UserMapper userMapper;
public void zidingyi_testPage1(){
//创建Page对象
Page<User> zidingyi_page = new Page<>(0,3);//例如每页显示3条数据,我们访问第一页,也就是控制台会输出第一页的三条数据
userMapper.selectPage(zidingyi_page,null);//null表示对所有数据的分页
System.out.println(zidingyi_page);
}
}
//分页相关数据的获取
public void zidingyi_testPage2(){
//创建Page对象
Page<User> zidingyi_page = new Page<>(0,3);//例如每页显示3条数据,我们访问第一页,也就是控制台会输出第一页的三条数据
userMapper.selectPage(zidingyi_page,null);//null表示对所有数据的分页
System.out.println("当前页码是: "+zidingyi_page.getCurrent());
System.out.println("每页输出的条数是: "+zidingyi_page.getSize());
System.out.println("总页数是: "+zidingyi_page.getPages());
System.out.println("总记录数是: "+zidingyi_page.getTotal());
System.out.println("是否有下一页: "+zidingyi_page.hasNext());
System.out.println("是否有上一页: "+zidingyi_page.hasPrevious());
}
//注意如果k条数据里有逻辑字段,并且逻辑字段不为空,并且k数据已经被逻辑删除了,那么此时执行这里的查询方法,k数据即使符合条件也不会被查询到
//自定义分页功能: 如果在开发中,查询语句是我们自定义的,此时要通过分页插件实现分页功能,这个时候就需要自定义分页功能
第一步: 首先要模拟一下自定义查询语句,去UserMapper接口添加如下:
x
//自定义查询方法。注意方法如果是为了实现自定义分页功能的话,那么返回值必须是Page<>,对应的泛型就写实体类。且第一个参数必须是Page<>,对应的泛型就写实体类
Page<User> selectPageVo( ("page_mm") Page<User> page, Integer age);//根据年龄查询用户信息并进行分页查询
//因为上面那行有两个参数,所以我们可以通过@Param注解来设置命名参数来规定当前参数的访问规则
//然后去UserMapper.xml写对应的SQL语句
第二步: 然后去UserMapper.xml写对应的SQL语句,如下
x
<!--自定义查询语句,用于分页查询: Page<User> selectPageVo(@Param("page_mm") Page<User> page, Integer age);-->
<select id="selectPageVo" resultType="User">
<!--注意上一行的resultType属性写的是实体类(例如User类)的路径,或者别名,如果是别名的话,需要额外去application.yml文件里面添加一点点配置代码-->
select uid,user_name,age,email from t_user where age > #{age}
</select>
第三步: 最后就可以进行正式配置了,在下面写入如下测试
xxxxxxxxxx
//自定义分页功能
public void zidingyi_testPage3(){
//创建Page对象
Page<User> zidingyi_page = new Page<>(0,2);//例如每页显示2条数据,我们访问第一页,也就是控制台会输出第一页的2条数据
userMapper.selectPageVo(zidingyi_page,20);//这样写就是年龄大于20,注意对应的SQL在UserMapper.xml里面
System.out.println("当前页码是: "+zidingyi_page.getCurrent());
System.out.println("每页输出的条数是: "+zidingyi_page.getSize());
System.out.println("总页数是: "+zidingyi_page.getPages());
System.out.println("总记录数是: "+zidingyi_page.getTotal());
System.out.println("是否有下一页: "+zidingyi_page.hasNext());
System.out.println("是否有上一页: "+zidingyi_page.hasPrevious());
}