MyBatis 查询分页示例
在 MyBatis 中实现查询分页可以通过在 SQL 语句中使用 LIMIT
和 OFFSET
来实现。以下是一个简单的示例,展示如何在 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 注解来实现。