用mybayis整合thymeleaf怎么进行分页查询
时间: 2023-07-24 09:21:09 浏览: 102
要使用 MyBatis 和 Thymeleaf 进行分页查询,需要进行以下步骤:
1. 首先,在 Mapper.xml 文件中编写 SQL 语句,使用 LIMIT 关键字进行分页查询。例如,查询从第 10 条开始的 5 条数据:
```
<select id="selectByPage" parameterType="map" resultMap="BaseResultMap">
select * from my_table
order by id desc
limit #{start}, #{pageSize}
</select>
```
其中,#{start} 表示从第几条数据开始查询,#{pageSize} 表示每页查询的数据条数。
2. 在 Service 层中编写分页查询的方法。方法中需要调用 MyBatis 的分页插件 PageHelper 来实现分页功能:
```
@Service
public class MyService {
@Autowired
private MyMapper myMapper;
public List<MyObject> selectByPage(int pageNum, int pageSize) {
// 设置分页参数
PageHelper.startPage(pageNum, pageSize);
List<MyObject> myObjects = myMapper.selectByPage();
// 使用 PageInfo 对象获取分页信息
PageInfo<MyObject> pageInfo = new PageInfo<>(myObjects);
return myObjects;
}
}
```
3. 在 Controller 层中获取前端传递的 pageNum 和 pageSize 参数,并调用 Service 层中的分页查询方法:
```
@Controller
public class MyController {
@Autowired
private MyService myService;
@GetMapping("/list")
public String list(Model model,
@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "5") int pageSize) {
List<MyObject> myObjects = myService.selectByPage(pageNum, pageSize);
model.addAttribute("myObjects", myObjects);
return "list";
}
}
```
4. 在 Thymeleaf 模板中使用 PageHelper 对象获取分页信息,并展示分页导航条和数据列表:
```
<div th:if="${#lists.size(myObjects) == 0}">暂无数据</div>
<div th:each="myObject : ${myObjects}">
<p th:text="${myObject.name}"></p>
</div>
<div th:if="${#lists.size(myObjects) > 0}">
<ul class="pagination">
<li th:class="${pageInfo.isFirstPage() ? 'disabled' : ''}">
<a th:href="@{/list(pageNum=1,pageSize=${pageSize})}" aria-label="First">
<span aria-hidden="true">«</span>
</a>
</li>
<li th:class="${pageInfo.hasPreviousPage() ? '' : 'disabled'}">
<a th:href="@{/list(pageNum=${pageInfo.prePage},pageSize=${pageSize})}" aria-label="Previous">
<span aria-hidden="true">‹</span>
</a>
</li>
<li th:each="num : ${pageInfo.navigatepageNums}"
th:class="${num == pageInfo.pageNum ? 'active' : ''}">
<a th:href="@{/list(pageNum=${num},pageSize=${pageSize})}" th:text="${num}"></a>
</li>
<li th:class="${pageInfo.hasNextPage() ? '' : 'disabled'}">
<a th:href="@{/list(pageNum=${pageInfo.nextPage},pageSize=${pageSize})}" aria-label="Next">
<span aria-hidden="true">›</span>
</a>
</li>
<li th:class="${pageInfo.isLastPage() ? 'disabled' : ''}">
<a th:href="@{/list(pageNum=${pageInfo.pages},pageSize=${pageSize})}" aria-label="Last">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</div>
```
其中,PageInfo 对象可以通过在 Service 层中使用 PageHelper.startPage() 方法后获取到。Thymeleaf 中的 #lists.size() 方法可以获取列表的大小,用于判断是否有数据需要展示。分页导航条可以使用 Bootstrap 等框架进行美化。
阅读全文