以下是一个使用 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/p6Js 著作权归作者所有。请勿转载和采集!

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