下面是“java-SSH2实现数据库和界面的分页”的完整攻略:
准备工作
- 创建一个Web工程,并配置好SSH2框架。
- 在项目中引入MySQL的JDBC驱动包。
- 编写JSP页面,用于展示分页数据。
实现分页查询功能
第一步:编写DAO层代码
- DAO层是负责与数据库进行交互的层级,我们将在该层实现查询数据的功能。
- 在DAO层中,首先要编写一个查询总记录数的方法,用于确定分页的总页数。
- 其次,编写查询具体数据的方法,需要传入分页的起始位置和每页展示的记录数。
- 代码示例:
public interface UserDao {
// 查询总记录数
int getTotalCount();
// 分页查询数据
List<User> getUserList(int startIndex, int pageSize);
}
public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao {
// 查询总记录数
public int getTotalCount() {
String hql = "select count(*) from User";
Number count = (Number) getSession().createQuery(hql).uniqueResult();
return count.intValue();
}
// 分页查询数据
public List<User> getUserList(int startIndex, int pageSize) {
String hql = "from User";
Query query = getSession().createQuery(hql);
query.setFirstResult(startIndex);
query.setMaxResults(pageSize);
return query.list();
}
}
第二步:编写Service层代码
- Service层是负责业务逻辑的层级,我们将在该层调用DAO层的方法,并完成数据的分页处理。
- 首先,编写查询分页数据的方法,需要传入当前页数和每页展示的记录数,同时需要调用DAO层的获取总记录数和查询具体数据的方法,计算出分页的总页数,并将计算结果放入Pager对象中返回给Controller层。
- 代码示例:
public interface UserService {
// 查询分页数据
Pager<User> getUserPager(int currentPage, int pageSize);
}
public class UserServiceImpl extends BaseServiceImpl<User> implements UserService {
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
// 查询分页数据
public Pager<User> getUserPager(int currentPage, int pageSize) {
//获取总条数
int totalCount = userDao.getTotalCount();
//计算总页数
int totalPages = (totalCount + pageSize - 1) / pageSize;
//计算分页起始位置
int startIndex = (currentPage - 1) * pageSize;
//调用DAO层查询分页数据
List<User> userList = userDao.getUserList(startIndex, pageSize);
//将查询结果封装到Pager对象中
Pager<User> pager = new Pager<>();
pager.setCurrentPage(currentPage);
pager.setPageSize(pageSize);
pager.setTotalRecord(totalCount);
pager.setTotalPage(totalPages);
pager.setList(userList);
return pager;
}
}
第三步:编写Controller层代码
- Controller层是负责与视图层进行交互的层级,我们将在该层调用Service层的方法,并将分页数据封装到ModelAndView对象中返回给JSP页面。
- 首先,编写展示分页数据的方法,在该方法中需要接收当前页数pageNum和每页展示的记录数pageSize的参数,并将其传入Service层中的查询分页数据的方法中,同时需要将查询结果封装到ModelAndView对象中并返回给JSP页面。
- 其次,在JSP页面中展示数据并添加分页展示的功能。
- 代码示例:
public class UserController {
private UserService userService;
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
//展示分页数据
public ModelAndView showUserList(int pageNum, int pageSize) {
Pager<User> pager = userService.getUserPager(pageNum, pageSize);
ModelAndView mv = new ModelAndView("userList");
mv.addObject("pager", pager);
return mv;
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户列表</title>
</head>
<body>
<table>
<thead>
<tr>
<th>ID</th>
<th>用户名</th>
<th>密码</th>
</tr>
</thead>
<tbody>
<c:forEach items="${pager.list}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.username}</td>
<td>${user.password}</td>
</tr>
</c:forEach>
</tbody>
</table>
<c:if test="${pager.totalPage > 1}">
<div>
<c:if test="${pager.currentPage > 1}">
<a href="?pageNum=${pager.currentPage - 1}&pageSize=${pager.pageSize}">上一页</a>
</c:if>
<c:forEach var="i" begin="1" end="${pager.totalPage}">
<c:choose>
<c:when test="${pager.currentPage == i}">
<span>${i}</span>
</c:when>
<c:otherwise>
<a href="?pageNum=${i}&pageSize=${pager.pageSize}">${i}</a>
</c:otherwise>
</c:choose>
</c:forEach>
<c:if test="${pager.currentPage < pager.totalPage}">
<a href="?pageNum=${pager.currentPage + 1}&pageSize=${pager.pageSize}">下一页</a>
</c:if>
</div>
</c:if>
</body>
</html>
示例展示
这里给出两个示例:
示例一
假设我们需要展示第3页,每页展示10条数据,并且在DAO层中查询到的数据如下:
[
{id: 1, username: "张三", password: "123456"},
{id: 2, username: "李四", password: "123456"},
{id: 3, username: "王五", password: "123456"},
{id: 4, username: "赵六", password: "123456"},
{id: 5, username: "钱七", password: "123456"},
{id: 6, username: "孙八", password: "123456"},
{id: 7, username: "周九", password: "123456"},
{id: 8, username: "吴十", password: "123456"},
{id: 9, username: "郑十一", password: "123456"},
{id: 10, username: "马十二", password: "123456"},
{id: 11, username: "陈十三", password: "123456"},
{id: 12, username: "黄十四", password: "123456"},
{id: 13, username: "林十五", password: "123456"}
]
则分页查询结果应为:
[
{id: 21, username: "陈二十一", password: "123456"},
{id: 22, username: "黄二十二", password: "123456"},
{id: 23, username: "林二十三", password: "123456"},
{id: 24, username: "张二十四", password: "123456"},
{id: 25, username: "李二十五", password: "123456"},
{id: 26, username: "王二十六", password: "123456"},
{id: 27, username: "赵二十七", password: "123456"},
{id: 28, username: "钱二十八", password: "123456"},
{id: 29, username: "孙二十九", password: "123456"},
{id: 30, username: "周三十", password: "123456"}
]
示例二
假设我们需要展示每页展示5条数据,而在DAO层中查询到的数据总共有15条,其中分别是1、2、3……15号数据。
则分页查询结果应为:
第1页,展示1、2、3、4、5号数据。
第2页,展示6、7、8、9、10号数据。
第3页,展示11、12、13、14、15号数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java-SSH2实现数据库和界面的分页 - Python技术站