分頁在企業級系統必不可少,特別是早年開發人員,在sql裏寫limit。後來隨着技術不斷更新升級,向limit咱們無需手寫,能夠經過插件來實現,插件本質上就是limit(在查詢語句後面添加limit來作分頁)。java
MyBatis有PageHelper作分頁,MyBatis-Plus只需添加一個配置(spring)或配置類修改就能實現分頁。web
package com.blog.tutorial.config; import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator; import com.baomidou.mybatisplus.extension.incrementer.H2KeyGenerator; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @Author: fun * @Description: 分頁攔截器 * @Date: 2020/9/10 10:26 * @Version: 1.0.0 */@Configuration public class MybatisPlusConfig { /** * 注入主鍵生成器 */ @Bean public IKeyGenerator keyGenerator() { return new H2KeyGenerator(); } /** * 分頁插件 */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } }
package com.blog.tutorial.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.blog.tutorial.entity.Users; import org.springframework.stereotype.Repository; import java.util.List; /** * <p> * Mapper 接口 * </p> * * @author youcong * @since 2020-04-18 */@Repository public interface UsersDao extends BaseMapper<Users> { IPage<Users> selectPageVo(Page<Users> page); }
<?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.blog.tutorial.dao.UsersDao"> <!-- 通用查詢映射結果 --> <resultMap id="BaseResultMap" type="com.blog.tutorial.entity.Users"> <id column="ID" property="id"/> <result column="user_login" property="userLogin"/> <result column="user_pass" property="userPass"/> <result column="user_nicename" property="userNicename"/> <result column="user_email" property="userEmail"/> <result column="user_url" property="userUrl"/> <result column="user_registered" property="userRegistered"/> <result column="user_activation_key" property="userActivationKey"/> <result column="user_status" property="userStatus"/> <result column="display_name" property="displayName"/> </resultMap> <!-- 通用查詢結果列 --> <sql id="Base_Column_List"> ID AS id, user_login AS userLogin, user_pass AS userPass, user_nicename AS userNicename, user_email AS userEmail, user_url AS userUrl, user_registered AS userRegistered, user_activation_key AS userActivationKey, user_status AS userStatus, display_name AS displayName </sql> <!-- 查詢用戶列表 --> <select id="selectPageVo" resultMap="BaseResultMap"> select ID,user_login, user_pass, user_nicename, user_email, user_url, user_registered, user_activation_key, user_status, display_name from wp_users </select> </mapper>
package com.blog.tutorial.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.blog.tutorial.entity.Users; /** * @description: * @author: youcong * @time: 2020/11/14 13:26 */public interface UsersService extends IService<Users> { IPage<Users> selectUserPage(Page<Users> page); }
package com.blog.tutorial.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.blog.tutorial.dao.UsersDao; import com.blog.tutorial.entity.Users; import com.blog.tutorial.service.UsersService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * @description: * @author: youcong * @time: 2020/11/14 13:27 */@Service public class UsersServiceImpl extends ServiceImpl<UsersDao, Users> implements UsersService { @Autowired private UsersDao usersDao; @Override public IPage<Users> selectUserPage(Page<Users> page) { return usersDao.selectPageVo(page); } }
package com.blog.tutorial.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.blog.tutorial.entity.Users; import com.blog.tutorial.service.UsersService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @description: * @author: youcong * @time: 2020/11/14 13:27 */@RestController @RequestMapping("/user") public class UserController { @Autowired private UsersService usersService; @GetMapping("/list") public Map list(@RequestParam Integer pageNum, @RequestParam Integer pageSize) { Map<String, Object> returnMap = new HashMap<>(); Page<Users> page = new Page<>(pageNum, pageSize); IPage<Users> data = usersService.selectUserPage(page); returnMap.put("count", data.getTotal()); returnMap.put("data", data.getRecords()); return returnMap; } }
效果圖以下:spring
數據恰好十條,而且有總條數。sql
本次例子用的是本身寫的sql並結合MyBatis-Plus分頁插件來實現分頁的,適用場景比較廣,一般是多表關聯的查詢語句等。若是是單表的話,直接用MyBatis-Plus單表自帶的分頁API便可。mybatis