切換語言為:簡體

MyBatisPlus如何實現對查詢結果分頁?

  • 爱糖宝
  • 2024-08-28
  • 2069
  • 0
  • 0

MyBatis-Plus 是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。MyBatis-Plus 支援多種資料庫的分頁查詢,其分頁功能是透過 Page 類實現的。

以下是使用 MyBatis-Plus 實現分頁查詢的基本步驟:

  1. 新增依賴:首先確保你的專案中已經新增了 MyBatis-Plus 的依賴。

  2. 配置 Mapper 介面:建立一個 Mapper 介面,該介面繼承自 BaseMapper<T>,其中 T 是你的實體類。

  3. 建立 Service:在 Service 層中,你可以注入 Mapper 介面,並呼叫其分頁查詢的方法。

  4. 使用 Page 類:建立一個 Page 物件,設定當前頁碼和每頁顯示的記錄數。

  5. 呼叫分頁查詢:在 Mapper 介面中定義一個分頁查詢的方法,使用 @Select 註解或者 XML 對映檔案來指定查詢語句。然後在 Service 層呼叫這個方法,傳入 Page 物件。

  6. 處理結果:分頁查詢的結果會返回一個 PageInfo<T> 物件,其中包含了當前頁的資料和分頁資訊。

好的,用一個案例來具體看一下,如何使用 MyBatis-Plus 進行分頁查詢。假設我們有一個需求是,在使用者管理系統,需要對使用者列表進行分頁顯示。

  1. 實體類(User.java)

public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
    // 省略其他欄位和getter/setter方法
}

  1. Mapper 介面(UserMapper.java)

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

public interface UserMapper extends BaseMapper<User> {
    // 這裏可以新增自定義的查詢方法,例如按狀態查詢
    Page<User> selectByState(Page<User> page, @Param("state") Integer state);
}

  1. Mapper XML 檔案(UserMapper.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.mapper.UserMapper">
    <!-- 按狀態查詢使用者的分頁結果 -->
    <select id="selectByState" resultType="com.example.entity.User">
        SELECT * FROM user WHERE state = #{state}
    </select>
</mapper>

  1. Service 介面(IUserService.java)

import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.entity.User;

public interface IUserService extends IService<User> {
    IPage<User> getUserListByState(Integer state, int current, int size);
}

  1. Service 實現(UserServiceImpl.java)

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.mapper.UserMapper;
import com.example.entity.User;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {

    @Override
    public IPage<User> getUserListByState(Integer state, int current, int size) {
        IPage<User> page = this.page(new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(current, size), null);
        if (state != null) {
            return this.baseMapper.selectByState(page, state);
        }
        return page;
    }
}

  1. Controller(UserController.java)

import com.example.service.IUserService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Autowired
    private IUserService userService;

    @GetMapping("/users")
    public IPage<User> getUsers(@RequestParam(defaultValue = "0") Integer state,
                                 @RequestParam(defaultValue = "1") int current,
                                 @RequestParam(defaultValue = "10") int size) {
        return userService.getUserListByState(state, current, size);
    }
}

  1. 啟動類(Application.java)

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

  1. application.properties

# 配置資料庫連線資訊
spring.datasource.url=jdbc:mysql://localhost:3306/userdb?useSSL=false&serverTimezone=UTC
spring.datasource.username=weige
spring.datasource.password=wg123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# 配置 MyBatis-Plus
mybatis-plus.mapper-locations=classpath:/mapper/*.xml
mybatis-plus.type-aliases-package=com.vin.entity

OK,這個示例不知道是否滿足你的需求,你也可以根據自己的實際情況來最佳化程式碼,成為你需要的樣子。

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.