使用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/ioT0 著作权归作者所有。请勿转载和采集!