接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这页数据。