以下是一个使用servlet+jsp+mybatis分页插件的示例代码,包含了首页、下一页、上一页和尾页的功能:

  1. 创建一个名为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
    }
}
  1. 在mybatis的配置文件中注册分页插件:
<plugins>
    <plugin interceptor="your.package.name.PageHelper">
</plugins>
  1. 创建一个名为User的实体类:
public class User {
    private int id;
    private String name;
    // getter and setter methods
}
  1. 创建一个名为UserMapper的接口,定义查询用户列表和总记录数的方法:
public interface UserMapper {
    List<User> getUserList();
    int getUserCount();
}
  1. 创建一个名为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>
  1. 创建一个名为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();
        }
    }
}
  1. 创建一个名为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);
    }
}
  1. 创建一个名为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标签库展示用户列表和分页导航

使用servlet+jsp+mybatis的分页插件写出首页 下一页 上一页 尾页

原文地址: https://www.cveoy.top/t/topic/ioT0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录