MyBatis 查询分页示例

MyBatis 查询分页示例

在 MyBatis 中实现查询分页可以通过在 SQL 语句中使用 LIMITOFFSET 来实现。以下是一个简单的示例,展示如何在 MyBatis 中实现查询分页。

1. 数据库表结构

CREATE TABLE documents (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255),
    description TEXT,
    category_id INT,
    file_path VARCHAR(500),
    file_name VARCHAR(255),
    file_code VARCHAR(200),
    uploader VARCHAR(255),
    upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

2. MyBatis Mapper 接口

public interface DocumentMapper {
    List<Document> selectDocumentsWithPagination(@Param("offset") int offset, @Param("limit") int limit);
}

3. MyBatis 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.DocumentMapper">

    <select id="selectDocumentsWithPagination" resultType="com.example.model.Document">
        SELECT * 
        FROM documents
        ORDER BY upload_time DESC
        LIMIT #{limit} OFFSET #{offset}
    </select>

</mapper>

4. Service 层调用

@Service
public class DocumentService {

    @Autowired
    private DocumentMapper documentMapper;

    public List<Document> getDocuments(int page, int pageSize) {
        int offset = (page - 1) * pageSize;
        return documentMapper.selectDocumentsWithPagination(offset, pageSize);
    }
}

5. Controller 层调用

@RestController
@RequestMapping("/documents")
public class DocumentController {

    @Autowired
    private DocumentService documentService;

    @GetMapping
    public List<Document> getDocuments(@RequestParam int page, @RequestParam int pageSize) {
        return documentService.getDocuments(page, pageSize);
    }
}

6. 说明

  • LIMIT #{limit} OFFSET #{offset}LIMIT 指定返回的最大行数,OFFSET 指定跳过的行数。offset 的计算方式为 (page - 1) * pageSize
  • order by upload_time DESC:为了展示最新上传的文档,通常按上传时间降序排列。

这个例子展示了如何通过 MyBatis 的 XML 映射文件实现分页查询,你也可以直接使用 MyBatis 注解来实现。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
引用[1]:mybatis-plus中的分页查询功能需要使用PaginationInnerInterceptor分页插件来支持。在配置类中,我们可以通过创建一个MybatisPlusInterceptor对象,并添加PaginationInnerInterceptor作为内部拦截器来实现分页功能。具体的配置代码如下: ```java @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } } ``` 引用[2]:mybatis-plus分页查询的实现原理是通过分页拦截器PaginationInnerInterceptor来拦截所有查询请求,并在执行查询前判断参数中是否包含IPage类型的参数。如果包含IPage类型的参数,则根据分页信息重新组装成分页查询的SQL。 根据以上的配置和实现原理,下面是一个mybatis plus分页查询接口的示例: ```java import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; public interface MyService extends IService<MyEntity> { IPage<MyEntity> selectPage(Page<MyEntity> page); } ``` 在这个示例中,我们定义了一个MyService接口,继承自IService,并使用了MyEntity作为实体类。在selectPage方法中,我们使用了Page对象作为参数,并返回一个IPage对象,实现了分页查询的功能。 希望以上示例对您有帮助。如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天进步2015

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值