下面是一个基于SSM(Spring + Spring MVC + MyBatis)和JSP的图书管理系统的代码示例,实现了图书列表的分页显示功能。
- 实体类 Book.java:
public class Book {
private Integer id;
private String title;
private String author;
// 其他属性...
// 省略 getter 和 setter 方法
}
- DAO接口 BookMapper.java:
public interface BookMapper {
List<Book> getBooks();
int getBookCount();
List<Book> getBooksByPage(@Param("start") int start, @Param("pageSize") int pageSize);
}
- DAO映射文件 BookMapper.xml:
<mapper namespace="com.example.dao.BookMapper">
<select id="getBooks" resultType="com.example.model.Book">
SELECT * FROM book
</select>
<select id="getBookCount" resultType="int">
SELECT COUNT(*) FROM book
</select>
<select id="getBooksByPage" parameterType="map" resultType="com.example.model.Book">
SELECT * FROM book LIMIT #{start}, #{pageSize}
</select>
</mapper>
- Service实现类 BookServiceImpl.java:
@Service
public class BookServiceImpl implements BookService {
@Autowired
private BookMapper bookMapper;
public List<Book> getAllBooks() {
return bookMapper.getBooks();
}
public PageInfo<Book> getBooksByPage(int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<Book> books = bookMapper.getBooksByPage((pageNum - 1) * pageSize, pageSize);
return new PageInfo<>(books);
}
public int getBookCount() {
return bookMapper.getBookCount();
}
}
- Controller类 BookController.java:
@Controller
public class BookController {
@Autowired
private BookService bookService;
@RequestMapping("/book/list")
public String getBookList(@RequestParam(defaultValue = "1") int pageNum, Model model) {
int pageSize = 10; // 每页显示的记录数
PageInfo<Book> pageInfo = bookService.getBooksByPage(pageNum, pageSize);
model.addAttribute("pageInfo", pageInfo);
return "book_list";
}
}
- JSP页面 book_list.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图书列表</title>
</head>
<body>
<h1>图书列表</h1>
<table border="1">
<tr>
<th>ID</th>
<th>Title</th>
<th>Author</th>
<!-- 其他列... -->
</tr>
<c:forEach items="${pageInfo.list}" var="book">
<tr>
<td>${book.id}</td>
<td>${book.title}</td>
<td>${book.author}</td>
<!-- 其他列... -->
</tr>
</c:forEach>
</table>
<!-- 分页导航 -->
<div class="pagination">
<c:if test="${not empty pageInfo}">
<c:url value="/book/list" var="firstPageUrl">
<c:param name="pageNum" value="1" />
</c:url>
<c:url value="/book/list" var="lastPageUrl">
<c:param name="pageNum" value="${pageInfo.pages}" />
</c:url>
<a href="${firstPageUrl}">首页</a>
<c:if test="${pageInfo.hasPreviousPage}">
<c:url value="/book/list" var="prevPageUrl">
<c:param name="pageNum" value="${pageInfo.prePage}" />
</c:url>
<a href="${prevPageUrl}"><</a>
</c:if>
<!-- 当前页左边显示的页码 -->
<c:forEach begin="${pageInfo.pageNum - 2}"
end="${pageInfo.pageNum - 1 > 0 ? pageInfo.pageNum - 1 : 1 }"
varStatus="status">
<c:if test="${status.index > 0}">
<c:url value="/book/list" var="pageNumUrl">
<c:param name="pageNum" value="${status.index + pageInfo.pageNum - 2}" />
</c:url>
<a href="${pageNumUrl}">${status.index + pageInfo.pageNum - 2}</a>
</c:if>
</c:forEach>
<!-- 当前页码 -->
${pageInfo.pageNum}
<!-- 当前页右边显示的页码 -->
<c:forEach begin="${pageInfo.pageNum + 1}"
end="${(pageInfo.pageNum + 3) <= pageInfo.pages ? (pageInfo.pageNum + 3) : pageInfo.pages}"
varStatus="status">
<c:url value="/book/list" var="pageNumUrl">
<c:param name="pageNum" value="${status.index + pageInfo.pageNum}" />
</c:url>
<a href="${pageNumUrl}">${status.index + pageInfo.pageNum}</a>
</c:forEach>
<c:if test="${pageInfo.hasNextPage}">
<c:url value="/book/list" var="nextPageUrl">
<c:param name="pageNum" value="${pageInfo.nextPage}" />
</c:url>
<a href="${nextPageUrl}">></a>
</c:if>
<a href="${lastPageUrl}">尾页</a>
</c:if>
</div>
</body>
</html>
上述代码实现了通过SSM和JSP实现图书列表的分页显示功能。需要注意,还需配置相关的Spring、MyBatis和数据库连接等配置信息,以及引入相应的依赖库。以上代码仅供参考,具体根据项目需求进行调整和完善。
内容由零声教学AI助手提供,问题来源于学员提问




