Servlet+JSP+MyBatis 分页插件实现首页、下一页、上一页、尾页功能
以下是一个使用 servlet+jsp+mybatis 分页插件的示例代码,包含了首页、下一页、上一页和尾页的功能:
- 创建一个名为 PageHelper 的分页插件,实现 Interceptor 接口:
import com.github.pagehelper.PageHelper;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.*;
import java.util.Properties;
@Intercepts(@Signature(type = Executor.class, method = 'query', args = {MappedStatement.class, Object.class, org.apache.ibatis.session.RowBounds.class, org.apache.ibatis.session.ResultHandler.class}))
public class PageHelper implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
Object[] args = invocation.getArgs();
MappedStatement ms = (MappedStatement) args[0];
Object parameter = args[1];
org.apache.ibatis.session.RowBounds rowBounds = (org.apache.ibatis.session.RowBounds) args[2];
if (rowBounds != null && rowBounds != org.apache.ibatis.session.RowBounds.DEFAULT) {
return invocation.proceed();
} else {
org.apache.ibatis.session.RowBounds rb = new org.apache.ibatis.session.RowBounds(0, 10);
args[2] = rb;
return invocation.proceed();
}
}
@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
@Override
public void setProperties(Properties properties) {
// do nothing
}
}
- 在 mybatis 的配置文件中注册分页插件:
<plugins>
<plugin interceptor='your.package.name.PageHelper'>
</plugins>
- 创建一个名为 User 的实体类:
public class User {
private int id;
private String name;
// getter and setter methods
}
- 创建一个名为 UserMapper 的接口,定义查询用户列表和总记录数的方法:
public interface UserMapper {
List<User> getUserList();
int getUserCount();
}
- 创建一个名为 UserMapper.xml 的映射文件,实现查询用户列表和总记录数的 SQL 语句:
<mapper namespace='your.package.name.UserMapper'>
<select id='getUserList' resultType='your.package.name.User'>
SELECT * FROM user
</select>
<select id='getUserCount' resultType='int'>
SELECT COUNT(*) FROM user
</select>
</mapper>
- 创建一个名为 UserDao 的类,实现查询用户列表和总记录数的方法:
public class UserDao {
private final SqlSessionFactory sqlSessionFactory;
public UserDao(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
public List<User> getUserList() {
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
return mapper.getUserList();
}
}
public int getUserCount() {
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
return mapper.getUserCount();
}
}
}
- 创建一个名为 UserServlet 的 servlet,处理首页、下一页、上一页和尾页的请求:
@WebServlet('/users')
public class UserServlet extends HttpServlet {
private UserDao userDao;
@Override
public void init() throws ServletException {
SqlSessionFactory sqlSessionFactory = MyBatisUtils.getSqlSessionFactory();
userDao = new UserDao(sqlSessionFactory);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String pageStr = request.getParameter('page');
int page = pageStr != null ? Integer.parseInt(pageStr) : 1;
int pageSize = 10;
int totalCount = userDao.getUserCount();
int totalPages = (int) Math.ceil((double) totalCount / pageSize);
if (page < 1) {
page = 1;
} else if (page > totalPages) {
page = totalPages;
}
List<User> userList = userDao.getUserList();
request.setAttribute('userList', userList);
request.setAttribute('currentPage', page);
request.setAttribute('totalPages', totalPages);
request.getRequestDispatcher('index.jsp').forward(request, response);
}
}
- 创建一个名为 index.jsp 的页面,展示用户列表和分页导航:
<%@ page contentType='text/html; charset=UTF-8' %>
<html>
<head>
<title>User List</title>
</head>
<body>
<h1>User List</h1>
<table border='1'>
<tr>
<th>ID</th>
<th>Name</th>
</tr>
<% for (User user : (List<User>) request.getAttribute('userList')) { %>
<tr>
<td><%= user.getId() %></td>
<td><%= user.getName() %></td>
</tr>
<% } %>
</table>
<div>
<% int currentPage = (int) request.getAttribute('currentPage'); %>
<% int totalPages = (int) request.getAttribute('totalPages'); %>
<% if (currentPage > 1) { %>
<a href='?page=1'>首页</a>
<a href='?page=<%= currentPage - 1 %>'>上一页</a>
<% } %>
<% if (currentPage < totalPages) { %>
<a href='?page=<%= currentPage + 1 %>'>下一页</a>
<a href='?page=<%= totalPages %>'>尾页</a>
<% } %>
</div>
</body>
</html>
以上代码实现了一个简单的用户列表页面,包含了首页、下一页、上一页和尾页的功能。在 UserServlet 中,根据当前页数和每页显示的记录数计算出总页数,然后根据请求的页数查询对应页的用户列表,并将结果存储在 request 的属性中,在 index.jsp 页面中使用 JSP 标签库展示用户列表和分页导航。
原文地址: https://www.cveoy.top/t/topic/p6Js 著作权归作者所有。请勿转载和采集!