首页 > 数据库 >JavaEE_使用mybatis从数据库中获取分页数据,并在web端显示

JavaEE_使用mybatis从数据库中获取分页数据,并在web端显示

时间:2023-02-17 15:45:42浏览次数:41  
标签:web pageSize JavaEE 获取 pageNumber mybatis pi 页码 PageInfo

idea+servlet+jsp+jstl+mysql+mybatis。

 

 

 


 

一、准备数据库数据表(数据)

二、准备数据对象(pojo),创建对象set/get方法

  2.1单个数据对象

  2.2 页内数据对象

三、准备数据库操作层(dao/mapper)

  3.1 获取指定页码数据

  3.2 获取数据总条数

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.lurenjia.mapper.UserMapper">
    <!--分页获取,在mybatis中配置了com.lurenjia.pojo包的默认别名,所以此处直接使用类名作为放回值类型-->
    <select id="selectByPage" resultType="User" parameterType="map">
        select * from t_user limit #{pageStart},#{pageSize};
    </select>

    <!--获取结果的行数-->
    <select id="selectCount" resultType="long">
        select count(*) from t_user;
    </select>
</mapper>

四、业务层(service)

  根据分页大小和页码,获取到对应页码数据。

    @Override
    public PageInfo showPage(int pageSize, int pageNumber) throws IOException {
        //获取mybatis配置文件
        InputStream is = Resources.getResourceAsStream("mybatis_config.xml");
        //获取session工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        //获取session对象
        SqlSession session = factory.openSession();

        //获取页数据对象
        PageInfo pageInfo = new PageInfo();
        //每页显示个数
        pageInfo.setPageSize(pageSize);
        //页码
        pageInfo.setPageNumber(pageNumber);

        //页码信息
        Map<String,Object> map = new HashMap<>();
        //开始位置
        map.put("pageStart",pageSize*(pageNumber-1));
        //数量
        map.put("pageSize",pageSize);
        //获取到当前页码数据
        pageInfo.setList(session.selectList("com.lurenjia.mapper.UserMapper.selectByPage",map));
        //总条数
        long count = session.selectOne("com.lurenjia.mapper.UserMapper.selectCount");
        //获取页码数量
        pageInfo.setTotal(count%pageSize==0?(count/pageSize):(count/pageSize+1));
        return pageInfo;
    }

五、服务器层(servlet)

  LoginServlet,根据请求数据,调用业务层方法获取指定数据,转发给jsp页码显示。

    private UserService userService = new UserServiceImlp();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //分页大小
        String pageSizeStr = req.getParameter("pageSize");
        //默认2行数据一页
        int pageSize = 2;
        //如果传递过来了分页大小,则使用传递过来的
        if(pageSizeStr!=null && !pageSizeStr.equals("")){
            pageSize = Integer.parseInt(pageSizeStr);
        }

        //页码
        String pageNumberStr = req.getParameter("pageNumber");
        //默认显示第一页
        int pageNumber = 1;
        //如果传递过来了,则使用传递过来的页码
        if(pageNumberStr!=null && !pageNumberStr.equals("")){
            pageNumber = Integer.parseInt(pageNumberStr);
        }

        //获取到页内数据
        PageInfo pi = userService.showPage(pageSize,pageNumber);
        //携带数据
        req.setAttribute("PageInfo",pi);
        //请求转发
        req.getRequestDispatcher("index.jsp").forward(req,resp);
    }

六、jsp显示数据

  index.jsp,负责显示页面。

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
    <title>分页显示数据学习</title>
</head>
<body>
    <table border="1px">
        <tr>
            <th>编号</th>
            <th>账户</th>
            <th>密码</th>
            <th>年龄</th>
            <th>性别</th>
            <th>生日</th>
        </tr>
        <c:forEach items="${PageInfo.list}" var="pi">
            <tr>
                <td>${pi.uid}</td>
                <td>${pi.uname}</td>
                <td>${pi.password}</td>
                <td>${pi.age}</td>
                <td>${pi.sex==1?"男":"女"}</td>
                <td>${pi.birth}</td>
            </tr>
        </c:forEach>
    </table>
    <!--点击后发起请求给LoginServlet,显示上一页数据-->
            <!--如果当前页是第一页,则取消点击事件-->
    <a href="login?pageSize=${PageInfo.pageSize}&pageNumber=${PageInfo.pageNumber-1}"
            <c:if test="${PageInfo.pageNumber<=1}"> onclick="javascript:return false;" </c:if>
                >上一页</a>

    <a href="login?pageSize=${PageInfo.pageSize}&pageNumber=${PageInfo.pageNumber+1}"
            <c:if test="${PageInfo.pageNumber>=PageInfo.total}"> onclick="javascript:return false;" </c:if>
                >下一页</a>
    <br>
    <b>当前页码:${PageInfo.pageNumber}</b>
    <b>总页码:${PageInfo.total}</b>
    <b>页内行数:${PageInfo.pageSize}</b>
</body>
</html>

七、项目目录


 

运行结果:

 

 

 

  

 

标签:web,pageSize,JavaEE,获取,pageNumber,mybatis,pi,页码,PageInfo
From: https://www.cnblogs.com/lurenjia-bky/p/17130399.html

相关文章

  • mybatis使用
    查询问题方式一:LambdaQueryWrapper<Tenant>wrapper=newLambdaQueryWrapper<>();wrapper.like(Func.isNotEmpty(tenantPage.getTenantName()),Tenant::getTenantNam......
  • Linux下的高性能轻量级Web服务器(零)
    简介:本系列文章参考游双大佬的《Linux高性能服务器编程》一书编写(一本十分好的书,强烈推荐购买),写此系列文章的目的就是当作是此书的读书笔记。由于本人水平有限(准备以此项......
  • Linux下的高性能轻量级Web服务器(一)
    1.让服务器监听客户端的连接请求1.1代码块#include<sys/socket.h>#include<netinet/in.h>#include<string.h>#include<stdio.h>#include<stdlib.h>#defineBUF......
  • Vue CLI 2内置框架webpack框架结构解析
    目前Vue已经到3.X版本,相应的VueCLI也已经是VueCLI3版本,创建命令使用vuecreate,如果要用2.X版的vueinit命令,需要全局安装一个桥接工具:npminstall-g@vue/cli-init创......
  • Java-webshell 排查
    参考:https://javasec.org/javaweb/MemoryShell/https://goodapple.top/archives/1355简介本次分享为javawebshell排查初级。抛砖引玉java获取web权限的shell......
  • 4. JWT(JSON Web Token)鉴权
    通过第三节,知道了Token的使用方式以及组成,不难发现,服务端验证客户端发送过来的Token时,还需要查询数据库获取用户基本信息,然后验证Token是否有效;这样每次请求验证都......
  • Mybatis-ResultHandler
    Mybatis接口——ResultHandlermybatis中的ResultHandler主要有2个作用:对取出的结果进行统一处理配合defaultFetchSize解决oom问题那如何使用这个接口呢?首先,......
  • MyBatis、LogBack XML文件模板
    xxxMapper模板<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper......
  • 【博学谷学习记录】超强总结,用心分享 | 前端开发 web APIs(四)
    WebAPIs-第4天进一步学习DOM相关知识,实现可交互的网页特效能够插入、删除和替换元素节点能够依据元素节点关系查找节点1日期对象掌握Date日期对象的使用,......
  • 通过flask完成web实时播放视频
    defgen():r=redis.StrictRedis(host=REDIS_HOST,port=REDIS_PORT,db=REDIS_DB,password=PASS_WORD)whileTrue:try:#print(r.get(......