项目结构
配置文件
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author miemie
* @since 2018-08-10
*/
@Configuration
@MapperScan("com.example.demo.fr.mapper")
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
- UserMapper.java 方法内容
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.example.demo.fr.entity.User; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.demo.fr.model.MyPage; import com.example.demo.fr.model.ParamSome; import org.apache.ibatis.annotations.Param; /** * <p> * Mapper 接口 * </p> * * @author fr * @since 2019-01-24 */ public interface UserMapper extends BaseMapper<User> { /** * <p> * 查询 : 根据state状态查询用户列表,分页显示 * 注意!!: 如果入参是有多个,需要加注解指定参数名才能在xml中取值 * </p> * * @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象) * @return 分页对象 */ public IPage<User> selectPageVo(Page page); }
UserService.java 方法内容
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.example.demo.fr.entity.User; import com.baomidou.mybatisplus.extension.service.IService; import org.springframework.stereotype.Service; import java.util.List; /** * <p> * 服务类 * </p> * * @author fr * @since 2019-01-24 */ public interface UserService extends IService<User> { public IPage<User> selectUserPage(Page<User> page); }
UserServiceImpl.java 方法内容
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.example.demo.fr.entity.User; import com.example.demo.fr.mapper.UserMapper; import com.example.demo.fr.service.UserService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * <p> * 服务实现类 * </p> * * @author fr * @since 2019-01-24 */ @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Autowired private UserMapper userMapper; @Override public IPage<User> selectUserPage(Page<User> page) { // 不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题,这时候你需要自己查询 count 部分 // page.setOptimizeCountSql(false); // 当 total 为非 0 时(默认为 0),分页插件不会进行 count 查询 // 要点!! 分页返回的对象与传入的对象是同一个 return userMapper.selectPageVo(page); } }
分页使用model类
-
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** * @author miemie * @since 2018-08-10 */ @Data @Accessors(chain = true) @EqualsAndHashCode(callSuper = true) public class MyPage<T> extends Page<T> { private static final long serialVersionUID = 5194933845448697148L; private Integer selectInt; private String selectStr; public MyPage(long current, long size) { super(current, size); } }
package com.example.demo.fr.model; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * @author miemie * @since 2018-09-20 */ @Data @NoArgsConstructor @AllArgsConstructor public class ParamSome { private Integer yihao; private String erhao; }
Controller层测试类
-
import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.example.demo.fr.entity.User; import com.example.demo.fr.mapper.UserMapper; import com.example.demo.fr.model.MyPage; import com.example.demo.fr.model.ParamSome; import com.example.demo.fr.service.UserService; import ikidou.reflect.TypeBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * <p> * 前端控制器 * </p> * * @author fr * @since 2019-01-24 */ @RestController @RequestMapping("/fr/user") public class UserController { @Autowired private UserMapper userMapper; @Autowired private UserService userService; @PostMapping("/page") public void tes1t1s11() { System.out.println("----- baseMapper 自带分页 ------"); Page<User> page = new Page<>(1, 5); IPage<User> userIPage = userMapper.selectPage(page, new QueryWrapper<User>()); // Assert.assertSame(page, userIPage); System.out.println("总条数 ------> " + userIPage.getTotal()); System.out.println("当前页数 ------> " + userIPage.getCurrent()); System.out.println("当前每页显示数 ------> " + userIPage.getSize()); print(userIPage.getRecords()); System.out.println("----- baseMapper 自带分页 ------"); System.out.println("json 正反序列化 begin"); String json = JSON.toJSONString(page); Page<User> page1 = JSON.parseObject(json, TypeBuilder.newInstance(Page.class).addTypeParam(User.class).build()); print(page1.getRecords()); System.out.println("json 正反序列化 end"); System.out.println("----- 自定义 XML 分页 ------"); MyPage<User> myPage = new MyPage<User>(1, 5).setSelectInt(20).setSelectStr("Jack"); ParamSome paramSome = new ParamSome(20, "Jack"); IPage<User> userMyPage = userService.selectUserPage(myPage); System.out.println("总条数 ------> " + userMyPage.getTotal()); System.out.println("当前页数 ------> " + userMyPage.getCurrent()); System.out.println("当前每页显示数 ------> " + userMyPage.getSize()); print(userMyPage.getRecords()); System.out.println("----- 自定义 XML 分页 ------"); } private <T> void print(List<T> list) { if (!CollectionUtils.isEmpty(list)) { list.forEach(System.out::println); } } }
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="com.example.demo.fr.mapper.UserMapper"> <select id="selectPageVo" resultType="com.example.demo.fr.entity.User"> SELECT * FROM user </select> </mapper>
数据库表结构及数据
-
/* Navicat MySQL Data Transfer Source Server : 47.98.144.196 Source Server Version : 50724 Source Host : 47.98.144.196:3306 Source Database : test Target Server Type : MYSQL Target Server Version : 50724 File Encoding : 65001 Date: 2019-01-31 17:13:30 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for role -- ---------------------------- DROP TABLE IF EXISTS `role`; CREATE TABLE `role` ( `id` bigint(20) NOT NULL, `roleName` varchar(255) DEFAULT NULL, `roleDescribe` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of role -- ---------------------------- INSERT INTO `role` VALUES ('1', '1', '1'); INSERT INTO `role` VALUES ('2', '2', '2'); INSERT INTO `role` VALUES ('3', '3', '3'); INSERT INTO `role` VALUES ('4', '4', '4'); -- ---------------------------- -- Table structure for test -- ---------------------------- DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `id` int(15) NOT NULL, `name` varchar(255) DEFAULT NULL, `tel` varchar(255) DEFAULT NULL, `sex` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of test -- ---------------------------- INSERT INTO `test` VALUES ('1', '2', '3', '4'); -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(50) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `name` varchar(30) DEFAULT '' COMMENT '姓名', `age` int(11) DEFAULT NULL COMMENT '年龄', `email` varchar(50) DEFAULT NULL COMMENT '邮箱', `role_id` bigint(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('1', 'mp', '3', 'ab@c.c', '1'); INSERT INTO `user` VALUES ('2', 'Jack', '20', 'test2@baomidou.com', '2'); INSERT INTO `user` VALUES ('3', 'Tom', '28', 'test3@baomidou.com', '3'); INSERT INTO `user` VALUES ('4', 'Sandy', '21', null, '4'); INSERT INTO `user` VALUES ('5', 'Billie', '24', 'test5@baomidou.com', '1'); INSERT INTO `user` VALUES ('6', 'Jone', '18', 'test1@baomidou.com', '2'); INSERT INTO `user` VALUES ('7', 'Jack', '20', 'test2@baomidou.com', '3'); INSERT INTO `user` VALUES ('8', 'Tom', '28', 'test3@baomidou.com', '4'); INSERT INTO `user` VALUES ('9', 'Sandy', '21', 'test4@baomidou.com', '1'); INSERT INTO `user` VALUES ('10', 'Billie', '24', 'test5@baomidou.com', '2'); INSERT INTO `user` VALUES ('11', 'Jone', '18', 'test1@baomidou.com', '3'); INSERT INTO `user` VALUES ('12', 'Jack', '20', 'test2@baomidou.com', '4'); INSERT INTO `user` VALUES ('13', 'Tom', '28', 'test3@baomidou.com', '1'); INSERT INTO `user` VALUES ('14', 'Sandy', '21', 'test4@baomidou.com', '2'); INSERT INTO `user` VALUES ('15', 'Billie', '24', 'test5@baomidou.com', '3'); INSERT INTO `user` VALUES ('19', '小羊', '3', 'abc@mp.com', '4');
-