接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<Person> getPersonByAge(Integer age); void insertPerson(Person person); Page<Person> 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<PersonMapper, Person> implements IPersonService { @Autowired private PersonMapper personMapper; @Override public Person getPersonById(String id) { return personMapper.selectById(id); } @Override public List<Person> getPersonByAge(Integer age) { return personMapper.selectByAge(age); } @Override public void insertPerson(Person person) { person.setId(UUID.randomUUID().toString().replace("-", "")); personMapper.insert(person); } @Override public Page<Person> pagePersonByAge(Integer pageNum, Integer pageSize, Integer age) { EntityWrapper<Person> entityWrapper = new EntityWrapper<>(); entityWrapper.eq("age", age); Page<Person> personPage = new Page<>(pageNum, pageSize); // 调用父类的分页方法 return super.selectPage(personPage, entityWrapper); } }
修改接口添加自定义方法,并且修改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<Person> getPersonByAge(Integer age); void insertPerson(Person person); Map<String, Object> pagePersonByAge(Integer pageNum, Integer pageSize, Integer age); Map<String, Object> 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<PersonMapper, Person> implements IPersonService { @Autowired private PersonMapper personMapper; @Override public Person getPersonById(String id) { return personMapper.selectById(id); } @Override public List<Person> getPersonByAge(Integer age) { return personMapper.selectByAge(age); } @Override public void insertPerson(Person person) { person.setId(UUID.randomUUID().toString().replace("-", "")); personMapper.insert(person); } @Override public Page<Person> pagePersonByAge(Integer pageNum, Integer pageSize, Integer age) { EntityWrapper<Person> entityWrapper = new EntityWrapper<>(); entityWrapper.eq("age", age); Page<Person> personPage = new Page<>(pageNum, pageSize); return super.selectPage(personPage, entityWrapper); } @Override public Map<String, Object> myPagePersonByAge(Integer pageNum, Integer pageSize, Integer age) { Page<Person> personPage = new Page<>(pageNum, pageSize); List<Person> result = personMapper.myPagePersonByAge(personPage, age); Map<String, Object> 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<Person> { List<Person> selectByAge(Integer age); List<Person> myPagePersonByAge(Page<Person> page, Integer age); }
修改PersonMapper.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="test.mybatis.plus.mapper.PersonMapper"> <select id="selectByAge" resultType="test.mybatis.plus.entity.Person" parameterType="Integer"> select t.* from person t where age = #{age} </select> <select id="myPagePersonByAge" resultType="test.mybatis.plus.entity.Person" parameterType="Integer"> select t.* from person t where t.age = #{age} </select> </mapper>
这样就实现了自定义的分页了。
小插曲:在调用接口时,发现pageNum等于0和等于1时候的数据都是一样的,以前用mongo的时候pageNum都是从0开始的,mybatis居然0和1都是一样的数据,打开源码才发现,当pageNum小于1时,取的都是1,所以就算是负数,取的也是1这页数据。
