8、Mybatis分页

一、普通的Limit分页

MySQL中执行分页语句:

index:从什么位置开始分页   pageIndex:分页显示的数量
select
* from mybatis.user limit index,pageIndex;

第一种、使用mybatis进行分页操作:(map操作)

  IUserDao接口(定义业务方法):

public interface IUserDao {
    /**分页查询*/
    List<User> getPageByLimit(Map<String,Integer> map);
}

  UserMapper.xmlmapper(实现类):

<!--命名空间:绑定UserDao相当于实现这个接口-->
<mapper namespace="com.zhixi.dao.IUserDao">

    <!--结果集映射:用于实体类跟数据库字段名称不一样的情况-->
    <resultMap id="userMap" type="user">
        <!--column:数据库中的字段 property:实体类中的属性-->
        <result column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="pwd" property="password"/>
    </resultMap>

    <!--分页-->
    <select id="getPageByLimit" resultMap="userMap" parameterType="map" >
        select * from mybatis.user limit #{index},#{pageIndex};
    </select>
</mapper>

  测试类:

public class IUserDaoTest {

    @Test
    public void getLimitTest() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        IUserDao mapper = sqlSession.getMapper(IUserDao.class);

        Map<String, Integer> map = new HashMap<String, Integer>();
        //这里的index跟pageIndex要与mapper对应
        map.put("index", 0);
        map.put("pageIndex", 2);

        List<User> pageByLimit = mapper.getPageByLimit(map);
        for (User user : pageByLimit) {
            System.out.println(user);
        }
        sqlSession.close();
    }

  结果:

 第二种、使用mybatis进行分页操作:(普通limit实现)

IUserDao接口(定义业务方法):

public interface UserDao {
    /**
     * 分页查询的第二种方式
     */
    List<User> getLimit(@Param("id1") Integer id1, @Param("id2") Integer id2);
}

  UserMapper.xmlmapper(实现类):

<!--命名空间:绑定UserDao相当于实现这个接口-->
<mapper namespace="com.zhixi.dao.IUserDao">

    <!--结果集映射:用于实体类跟数据库字段名称不一样的情况-->
    <resultMap id="userMap" type="user">
        <!--column:数据库中的字段 property:实体类中的属性-->
        <result column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="pwd" property="password"/>
    </resultMap>

    <!--分页-->
  <select id="getLimit" parameterType="int" resultMap="BaseResultMap">
   select * from mybatis.user limit #{id1},#{id2};
  </select>

</mapper>

  测试类:

public class IUserDaoTest {
@Test
public void getLimit(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> limit = mapper.getLimit(0, 2);
for (User user : limit) {
System.out.println(user);
}
sqlSession.close();
}
}

 二、使用PageHelper插件

官方文档地址:https://pagehelper.github.io/

在SpringBoot中使用分页插件:https://zhuanlan.zhihu.com/p/344982068

Maven:

        <!--Mybatis分页插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
View Code

1、数据表

CREATE TABLE `user`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `createtime` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 100001 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (1, 'test:0', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (2, 'test:1', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (3, 'test:2', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (4, 'test:3', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (5, 'test:4', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (6, 'test:5', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (7, 'test:6', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (8, 'test:7', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (9, 'test:8', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (10, 'test:9', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (11, 'test:10', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (12, 'test:11', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (13, 'test:12', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (14, 'test:13', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (15, 'test:14', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (16, 'test:15', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (17, 'test:16', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (18, 'test:17', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (19, 'test:18', '123456', '2022-09-09 10:07:53');
INSERT INTO `mybatis`.`user`(`id`, `name`, `password`, `createtime`) VALUES (20, 'test:19', '123456', '2022-09-09 10:07:53');

2、导入依赖

<!--Mybatis分页插件-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>

3、在SpringBoot中声明插件

#pagehelper分页插件配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql

4、业务代码

实体类:User

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Data;

/**
 * 
 * @TableName user
 */
@TableName(value ="user")
@Data
public class User implements Serializable {
    /**
     * 
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 
     */
    @TableField(value = "name")
    private String name;

    /**
     * 
     */
    @TableField(value = "password")
    private String password;

    /**
     * 
     */
    @TableField(value = "createtime")
    private LocalDateTime createtime;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;

    @Override
    public boolean equals(Object that) {
        if (this == that) {
            return true;
        }
        if (that == null) {
            return false;
        }
        if (getClass() != that.getClass()) {
            return false;
        }
        User other = (User) that;
        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
            && (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName()))
            && (this.getPassword() == null ? other.getPassword() == null : this.getPassword().equals(other.getPassword()))
            && (this.getCreatetime() == null ? other.getCreatetime() == null : this.getCreatetime().equals(other.getCreatetime()));
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
        result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
        result = prime * result + ((getPassword() == null) ? 0 : getPassword().hashCode());
        result = prime * result + ((getCreatetime() == null) ? 0 : getCreatetime().hashCode());
        return result;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getClass().getSimpleName());
        sb.append(" [");
        sb.append("Hash = ").append(hashCode());
        sb.append(", id=").append(id);
        sb.append(", name=").append(name);
        sb.append(", password=").append(password);
        sb.append(", createtime=").append(createtime);
        sb.append(", serialVersionUID=").append(serialVersionUID);
        sb.append("]");
        return sb.toString();
    }
}

Dao层:UserMapper

/**
* @author zhixi
* @description 针对表【user】的数据库操作Mapper
* @createDate 2022-09-09 09:23:14
* @Entity com.zhixi.pojo.User
*/
@Repository
public interface UserMapper extends BaseMapper<User> {
    List<User> selectAll();
}

Service层:UserService

import com.zhixi.pojo.User;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * @author zhixi
 * @description 针对表【user】的数据库操作Service
 * @createDate 2022-09-09 09:23:14
 */
public interface UserService extends IService<User> {
    /**
     * 测试分页插件(PageHelper)查询用户数据
     * @param pageNum 页码
     * @param pageSize  每页显示数量
     * @return 用户数据
     */
    List<User> selectAll(int pageNum, int pageSize);
}

Service层:UserServiceImpl  

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zhixi.mapper.UserMapper;
import com.zhixi.pojo.User;
import com.zhixi.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author zhixi
 * @description 针对表【user】的数据库操作Service实现
 * @createDate 2022-09-09 09:23:14
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User>
        implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> selectAll(int pageNum, int pageSize) {
        /*执行分页,传入页码以及每页显示的数量*/
        PageHelper.startPage(pageNum, pageSize);
        List<User> users = userMapper.selectList(null);
        PageInfo<User> pageInfo = new PageInfo<>(users);
        return pageInfo.getList();
    }
}

Controller层:UserController  

import com.zhixi.pojo.User;
import com.zhixi.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/selectAll/{pageNum}/{pageSize}")
    public List<User> selectAll(@PathVariable("pageNum") int pageNum, @PathVariable("pageSize") int pageSize) {
        return userService.selectAll(pageNum, pageSize);
    }
}

访问测试:

posted @ 2020-12-28 21:44  Java小白的搬砖路  阅读(195)  评论(0编辑  收藏  举报