假如每个属性对应很多行
时间: 2024-03-14 12:44:47 浏览: 64
如果每个属性对应很多行,可以考虑使用分页查询来限制每次查询的结果数量。具体步骤如下:
1. 在 Mapper.xml 文件中编写分页查询的 SQL 语句,例如:
```
<select id="selectUserByUsername" parameterType="String" resultType="com.example.User">
SELECT id, username, email FROM user WHERE username = #{username}
LIMIT #{offset}, #{pageSize}
</select>
```
其中,`#{offset}` 表示从第几条记录开始查询,`#{pageSize}` 表示每次查询的记录数。这里可以通过动态 SQL 来实现不同数据库的分页查询。
2. 在对应的 Mapper 接口中添加方法,方法名与 Mapper.xml 文件中的 id 属性相同,例如:
```
public interface UserMapper {
List<User> selectUserByUsername(@Param("username") String username, @Param("offset") int offset, @Param("pageSize") int pageSize);
}
```
其中,`@Param` 注解用于指定参数名称,方便在 Mapper.xml 文件中引用。
3. 在 Service 层中调用 Mapper 接口中的方法,例如:
```
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> getUserByUsername(String username, int pageNum, int pageSize) {
int offset = (pageNum - 1) * pageSize;
return userMapper.selectUserByUsername(username, offset, pageSize);
}
}
```
其中,`pageNum` 表示查询的页码,`pageSize` 表示每页显示的记录数,`offset` 表示从第几条记录开始查询。
4. 在控制器中添加处理请求的方法,例如:
```
@RequestMapping("/user")
public String getUserByUsername(@RequestParam("username") String username, @RequestParam(value = "pageNum", defaultValue = "1") int pageNum, Model model) {
List<User> userList = userService.getUserByUsername(username, pageNum, PAGE_SIZE);
PageInfo<User> pageInfo = new PageInfo<>(userList);
model.addAttribute("pageInfo", pageInfo);
return "userList"; // 返回视图名称
}
```
其中,`@RequestParam` 注解用于获取请求参数,`pageNum` 表示查询的页码,默认为 1,`PAGE_SIZE` 表示每页显示的记录数。`PageInfo` 是 MyBatis 提供的一个实用工具类,用于封装分页查询的结果。
5. 在视图(JSP、HTML 等)中使用 EL 表达式展示查询结果,例如:
```
<h1>User List</h1>
<table>
<tr>
<th>ID</th>
<th>Username</th>
<th>Email</th>
</tr>
<c:forEach items="${pageInfo.list}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.username}</td>
<td>${user.email}</td>
</tr>
</c:forEach>
</table>
<div class="pagination">
<c:if test="${pageInfo.hasPreviousPage}">
<a href="?username=${param.username}&pageNum=${pageInfo.pageNum - 1}">« Previous</a>
</c:if>
<c:forEach begin="1" end="${pageInfo.pages}" var="pageNum">
<c:choose>
<c:when test="${pageNum == pageInfo.pageNum}">
<span class="current">${pageNum}</span>
</c:when>
<c:otherwise>
<a href="?username=${param.username}&pageNum=${pageNum}">${pageNum}</a>
</c:otherwise>
</c:choose>
</c:forEach>
<c:if test="${pageInfo.hasNextPage}">
<a href="?username=${param.username}&pageNum=${pageInfo.pageNum + 1}">Next »</a>
</c:if>
</div>
```
其中,`<c:forEach>` 标签用于遍历分页查询的结果,`${pageInfo.list}` 表示查询结果的列表,`<div class="pagination">` 用于展示分页导航栏,其中的链接地址通过 EL 表达式构造。视图名称可以根据实际情况自行修改。
阅读全文