第一步: 在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()); }