Mybatis 中用provider写一个分页查询

在 MyBatis 中,你可以使用 Provider 来编写一个灵活的分页查询。Provider 允许你根据不同的条件来生成动态 SQL 查询语句。以下是一个使用 Provider 实现分页查询的示例:

  1. 创建分页查询提供器: 首先,你需要创建一个查询提供器类,用于生成动态的分页查询语句。
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;

public class UserSqlProvider {

    public String getUsersByPage(
            @Param("offset") int offset,
            @Param("limit") int limit) {
        return new SQL() {{
            SELECT("*");
            FROM("user");
            ORDER_BY("id"); // 根据需要添加排序条件
            LIMIT("#{limit}");
            if (offset > 0) {
                OFFSET("#{offset}");
            }
        }}.toString();
    }
}
  1. 在 Mapper 接口中使用 Provider 进行分页查询: 在 Mapper 接口中使用 @SelectProvider 注解指定查询提供器,传递参数。
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;

import java.util.List;

@Mapper
public interface UserMapper {

    @SelectProvider(type = UserSqlProvider.class, method = "getUsersByPage")
    List<User> getUsersByPage(
            @Param("offset") int offset,
            @Param("limit") int limit);
}
  1. 在 Service 或 Controller 中调用分页查询: 在你的 Service 或 Controller 类中调用 getUsersByPage 方法并传递分页参数。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    private final UserMapper userMapper;

    @Autowired
    public UserService(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    public List<User> getUsersByPage(int pageNo, int pageSize) {
        int offset = (pageNo - 1) * pageSize;
        return userMapper.getUsersByPage(offset, pageSize);
    }
}

在这个示例中,我们定义了一个分页查询提供器 UserSqlProvider,它生成带有动态分页查询的 SQL 语句。然后,在 Mapper 接口中使用 @SelectProvider 注解来使用这个查询提供器,并在 Service 类中调用查询。

通过这种方式,你可以使用 Provider 和动态 SQL 生成灵活的分页查询语句,根据不同的分页参数来查询数据库。

假设我们有一个实体类User,它有id、name和age三个属性,使用mybatis-plus进行分页查询的代码如下: 1. 定义mapper接口 ```java @Mapper public interface UserMapper extends BaseMapper<User> { IPage<User> selectUserPage(Page<User> page, @Param("name") String name, @Param("age") Integer age); } ``` 2. 编mapper xml文件 ```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="selectUserPage" resultType="com.example.entity.User"> SELECT * FROM user <where> <if test="name != null and name != ''"> AND name like concat('%', #{name}, '%') </if> <if test="age != null"> AND age = #{age} </if> </where> </select> </mapper> ``` 3. 在Service中调用mapper接口的方法 ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public IPage<User> selectUserPage(Page<User> page, String name, Integer age) { return userMapper.selectUserPage(page, name, age); } } ``` 4. 在Controller中调用Service的方法,获取分页数据 ```java @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @GetMapping("/page") public IPage<User> selectUserPage(@RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "10") Integer pageSize, String name, Integer age) { // 构建分页对象 Page<User> page = new Page<>(pageNum, pageSize); // 调用Service的方法,获取分页数据 return userService.selectUserPage(page, name, age); } } ``` 以上就是使用mybatis-plus进行分页查询的完整代码示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值