用mybayis整合thymeleaf根据用户名和真实姓名进行分页查询
时间: 2024-02-28 09:54:23 浏览: 99
mybatis分页查询
4星 · 用户满意度95%
要根据用户名和真实姓名进行分页查询,需要进行以下步骤:
1. 首先,在 Mapper.xml 文件中编写 SQL 语句,使用 WHERE 关键字加上条件进行查询,并使用 LIMIT 关键字进行分页查询。例如,查询用户名为 "admin",真实姓名为 "张三" 的用户,从第 10 条开始的 5 条数据:
```
<select id="selectByPage" parameterType="map" resultMap="BaseResultMap">
select * from my_table
where username like concat('%', #{username}, '%')
and real_name like concat('%', #{realName}, '%')
order by id desc
limit #{start}, #{pageSize}
</select>
```
其中,#{username} 表示用户名,#{realName} 表示真实姓名,#{start} 表示从第几条数据开始查询,#{pageSize} 表示每页查询的数据条数。
2. 在 Service 层中编写分页查询的方法。方法中需要传入用户名、真实姓名、pageNum 和 pageSize 参数,并调用 MyBatis 的分页插件 PageHelper 来实现分页功能:
```
@Service
public class MyService {
@Autowired
private MyMapper myMapper;
public List<MyObject> selectByPage(String username, String realName, int pageNum, int pageSize) {
// 设置分页参数
PageHelper.startPage(pageNum, pageSize);
List<MyObject> myObjects = myMapper.selectByPage(username, realName);
// 使用 PageInfo 对象获取分页信息
PageInfo<MyObject> pageInfo = new PageInfo<>(myObjects);
return myObjects;
}
}
```
3. 在 Controller 层中获取前端传递的参数,并调用 Service 层中的分页查询方法:
```
@Controller
public class MyController {
@Autowired
private MyService myService;
@GetMapping("/list")
public String list(Model model,
@RequestParam(defaultValue = "") String username,
@RequestParam(defaultValue = "") String realName,
@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "5") int pageSize) {
List<MyObject> myObjects = myService.selectByPage(username, realName, pageNum, pageSize);
model.addAttribute("myObjects", myObjects);
model.addAttribute("username", username);
model.addAttribute("realName", realName);
return "list";
}
}
```
4. 在 Thymeleaf 模板中使用表单获取用户名和真实姓名的值,并将其传递给 Controller 层进行查询:
```
<form class="form-inline" th:action="@{/list}" method="get">
<div class="form-group">
<label for="username">用户名:</label>
<input type="text" class="form-control" id="username" name="username" th:value="${username}">
</div>
<div class="form-group">
<label for="realName">真实姓名:</label>
<input type="text" class="form-control" id="realName" name="realName" th:value="${realName}">
</div>
<button type="submit" class="btn btn-primary">查询</button>
</form>
<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},username=${username},realName=${realName})}" 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},username=${username},realName=${realName})}" 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},username=${username},realName=${realName})}" th:text="${num}"></a>
</li>
<li th:class="${pageInfo.hasNextPage() ? '' : 'disabled'}">
<a th:href="@{/list(pageNum=${pageInfo.nextPage},pageSize=${pageSize},username=${username},realName=${realName})}" 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},username=${username},realName=${realName})}" aria-label="Last">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</div>
```
其中,使用 Thymeleaf 的表单获取用户名和真实姓名的值,并将其传递给 Controller 层进行查询。分页导航条和数据列表的展示方法与之前相同。
阅读全文