mybatis(二):mybatis分页和自定义分页

接mybatis第一章说的mybatis,再写一下mybatis集成分页的情况。

 

mybatis分页

首先需要一个分页的插件,代码如下:

package test.mybatis.plus.config;


import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisConfig {

    /**
     * mybatis的分页插件
     *
     * @return PaginationInterceptor
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

}

修改接口信息和service信息,继承Mybatis的实现类 ServiceImpl,调用父类的分页方法,这样就可以实现分页了。

package test.mybatis.plus.service;

import test.mybatis.plus.entity.Person;

import java.util.List;
import java.util.Map;

public interface IPersonService {
    Person getPersonById(String id);

    List getPersonByAge(Integer age);

    void insertPerson(Person person);

    Map pagePersonByAge(Integer pageNum, Integer pageSize, Integer age);


}



package test.mybatis.plus.service.impl;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import test.mybatis.plus.entity.Person;
import test.mybatis.plus.mapper.PersonMapper;
import test.mybatis.plus.service.IPersonService;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

@Service
public class PersonServiceImpl extends ServiceImpl implements IPersonService {

    @Autowired
    private PersonMapper personMapper;

    @Override
    public Person getPersonById(String id) {
        return personMapper.selectById(id);
    }

    @Override
    public List getPersonByAge(Integer age) {
        return personMapper.selectByAge(age);
    }

    @Override
    public void insertPerson(Person person) {
        person.setId(UUID.randomUUID().toString().replace("-", ""));
        personMapper.insert(person);
    }

    @Override
    public Map pagePersonByAge(Integer pageNum, Integer pageSize, Integer age) {
        EntityWrapper entityWrapper = new EntityWrapper<>();
        entityWrapper.eq("age", age);
        Page personPage = new Page<>(pageNum, pageSize);
        // 调用父类的分页方法
        Page page = super.selectPage(personPage, entityWrapper);
        List result = page.getRecords();
        long total = page.getTotal();
        Map resultMap = new HashMap<>(2);
        resultMap.put("result", result);
        resultMap.put("total", total);
        return resultMap;
    }



}

 

自定义分页

 

修改接口添加自定义方法,并且修改mapper方法。

package test.mybatis.plus.service;

import test.mybatis.plus.entity.Person;

import java.util.List;
import java.util.Map;

public interface IPersonService {
    Person getPersonById(String id);

    List getPersonByAge(Integer age);

    void insertPerson(Person person);

    Map pagePersonByAge(Integer pageNum, Integer pageSize, Integer age);

    Map myPagePersonByAge(Integer pageNum, Integer pageSize, Integer age);

}




package test.mybatis.plus.service.impl;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import test.mybatis.plus.entity.Person;
import test.mybatis.plus.mapper.PersonMapper;
import test.mybatis.plus.service.IPersonService;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

@Service
public class PersonServiceImpl extends ServiceImpl implements IPersonService {

    @Autowired
    private PersonMapper personMapper;

    @Override
    public Person getPersonById(String id) {
        return personMapper.selectById(id);
    }

    @Override
    public List getPersonByAge(Integer age) {
        return personMapper.selectByAge(age);
    }

    @Override
    public void insertPerson(Person person) {
        person.setId(UUID.randomUUID().toString().replace("-", ""));
        personMapper.insert(person);
    }

    @Override
    public Map pagePersonByAge(Integer pageNum, Integer pageSize, Integer age) {
        EntityWrapper entityWrapper = new EntityWrapper<>();
        entityWrapper.eq("age", age);
        Page personPage = new Page<>(pageNum, pageSize);
        Page page = super.selectPage(personPage, entityWrapper);
        List result = page.getRecords();
        long total = page.getTotal();
        Map resultMap = new HashMap<>(2);
        resultMap.put("result", result);
        resultMap.put("total", total);
        return resultMap;
    }


    @Override
    public Map myPagePersonByAge(Integer pageNum, Integer pageSize, Integer age) {
        Page personPage = new Page<>(pageNum, pageSize);
        List result = personMapper.myPagePersonByAge(personPage, age);
        Map resultMap = new HashMap<>(2);
        resultMap.put("result", result);
        return resultMap;
    }

}



package test.mybatis.plus.mapper;


import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.plugins.Page;
import org.apache.ibatis.annotations.Mapper;
import test.mybatis.plus.entity.Person;

import java.util.List;

@Mapper
public interface PersonMapper extends BaseMapper {

    List selectByAge(Integer age);

    List myPagePersonByAge(Page page, Integer age);

}

 

修改PersonMapper.xml文件:





    

    

 

这样就实现了自定义的分页了,由于mybatis-plus版本较低无法直接返回page,所以如果需要知道数据总量count的话,还是需要根据条件count一下。

但是mybatis-plus超过3.0.7版本之后就可以直接返回page了。这个可以下一篇博客中写出来。

 

小插曲:在调用接口时,发现pageNum等于0和等于1时候的数据都是一样的,以前用mongo的时候pageNum都是从0开始的,mybatis居然0和1都是一样的数据,打开源码才发现,当pageNum小于1时,取的都是1,所以就算是负数,取的也是1这页数据。

 

mybatis(二):mybatis分页和自定义分页_第1张图片

你可能感兴趣的:(mybatis分页,mybatis)