MyBatis快速入门——第六章、MyBatis分页demo测试

简介: MyBatis快速入门——第六章、MyBatis分页demo测试

1、映射mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC ".//mybaits.org/DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.item.mapper.ProductMapper">
    <select id="GetInfo" resultType="Product">
        select * from product limit #{pageNow},#{pageSize}
    </select>
    <delete id="DeleteById" parameterType="java.lang.Integer">
        delete from product where id="${id}"
    </delete>
</mapper>

2、映射接口ProductMapper

package com.item.mapper;
import com.item.model.Product;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ProductMapper {
    /**
     * 查询所有的接口
     * @return
     */
    List<Product> GetInfo(@Param("pageNow") int pageNow,@Param("pageSize")int pageSize);
    /**
     * 删除
     * @param id
     * @return
     */
    int DeleteById(@Param("id") String id);
}


3、ProductDAO.java数据层

package com.item.dao;
import com.item.common.JDBC;
import com.item.mapper.ProductMapper;
import com.item.model.Product;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
public class ProductDAO {
    /**
     * 获取所有查询信息
     * @return
     */
    public static List<Product> GetInfo(int pageNow,int pageSize){
        SqlSessionFactory factory = JDBC.GetConn();
        SqlSession session = factory.openSession();
        ProductMapper db = session.getMapper(ProductMapper.class);
        List<Product> list = db.GetInfo(pageNow,pageSize);
        session.close();
        return list;
    }
    /**
     * 删除
     * @param id
     * @return
     */
    public static boolean DeleteById(String id){
        SqlSessionFactory factory = JDBC.GetConn();
        SqlSession session = factory.openSession();
        ProductMapper db = session.getMapper(ProductMapper.class);
        int rows = db.DeleteById(id);
        session.commit();
        session.close();
        return rows>0;
    }
}

4、GetInfoServlet.java的servlet文件

package com.item.servlet;
import com.item.dao.ProductDAO;
import com.item.model.Product;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet("/GetInfo")
public class GetInfoServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String pageNow = request.getParameter("pageNow");
        String pageSize = request.getParameter("pageSize");
        int int_pageNow = Integer.parseInt(pageNow.isEmpty() ? "0" : pageNow);
        int int_pageSize = Integer.parseInt(pageSize.isEmpty() ? "3" : pageSize);
        System.out.println(int_pageNow+"~"+int_pageSize);
        int_pageNow=(int_pageNow-1)*int_pageSize;
        System.out.println(int_pageNow);
        List<Product> list = ProductDAO.GetInfo(int_pageNow,int_pageSize);
        //发送至前台
        request.setAttribute("lists",list);
        request.getRequestDispatcher("GetInfo.jsp").forward(request,response);
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}


5、JSP页面

<%@ page import="java.util.List" %>
<%@ page import="com.item.model.Product" %><%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2022/5/16 0016
  Time: 15:55
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>bootStrap——table</title>
    <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<% List<Product> list = (List<Product>) request.getAttribute("lists"); %>
<div style="width: 90%;text-align: center;padding:50px;font-size: 3rem">
    [<a href="/GetInfo?pageNow=1&pageSize=5">1,5</a>]
    [<a href="/GetInfo?pageNow=1&pageSize=3">1,3</a>]
    [<a href="/GetInfo?pageNow=1&pageSize=5">1,5</a>]
    [<a href="/GetInfo?pageNow=2&pageSize=5">2,5</a>]
    [<a href="/GetInfo?pageNow=2&pageSize=3">2,3</a>]
    [<a href="/GetInfo?pageNow=3&pageSize=2">3,2</a>]
</div>
<table class="table table-bordered table-hover">
    <tr class="info">
        <th>编号</th>        <th>创建时间</th>        <th>修改时间</th>        <th>产品名称</th>
        <th>产品标题</th>        <th>产品价格</th>        <th>产品数量</th>        <th>产品厂家</th>
        <th>产品颜色</th>        <th>产品重量</th>        <th>产品状态</th>        <th>操作</th>
    </tr>
    <% for (Product p : list) {
    %>
        <tr>
            <td><%=p.getId()%></td>
            <td><%=p.getCreateDate()%></td>
            <td><%=p.getModifyDate()%></td>
            <td><%=p.getProductName()%></td>
            <td><%=p.getProductTitle()%></td>
            <td><%=p.getProductPrice()%></td>
            <td><%=p.getProductCount()%></td>
            <td><%=p.getProductType()%></td>
            <td><%=p.getProductColor()%></td>
            <td><%=p.getProductWeight()%></td>
            <td><%=p.getProductStatus()%></td>
            <td>
                <a href="/DeleteById?id=<%=p.getId()%>" onclick="return confirm('是否删除此行?')" class="btn btn-primary">删除</a>
            </td>
        </tr>
    <%
    } %>
</table>
<hr/>
</body>
</html>

6、访问路径

http://localhost:8088/GetInfo?pageNow=1&pageSize=5


7、访问效果

image.png

image.png




删除一个信息


image.png

相关文章
|
SQL Java 数据库连接
微服务——MyBatis分页
本文介绍了分页的多种实现方式,包括自带RowBounds分页、第三方插件PageHelper分页、SQL分页、数组分页及拦截器分页。其中,RowBounds是先查询全部结果再内存分页;PageHelper通过修改SQL动态添加分页关键字;SQL分页依赖数据库自身的分页功能如`LIMIT`;数组分页则是查询全量数据后用`subList`方法截取;拦截器分页则统一在SQL后添加分页语句。最后总结逻辑分页适合小数据量,但大数据量易内存溢出;物理分页虽小数据量效率较低,但更适合大数据场景,优先推荐使用。
248 0
|
SQL Oracle 关系型数据库
【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页
【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页
|
SQL Java 数据库连接
MyBatis分页
MyBatis作为Java持久层框架,需结合数据库特性或插件实现分页。分页分为物理分页(如MySQL的LIMIT)和逻辑分页(内存截取),推荐使用PageHelper插件自动注入分页语句,提升开发效率与性能。需注意索引优化、深分页问题及多表关联时的兼容性,结合业务场景选择合适方案。
516 4
|
SQL Java 数据安全/隐私保护
发现问题:Mybatis-plus的分页总数为0,分页功能失效,以及多租户插件的使用。
总的来说,使用 Mybatis-plus 确实可以极大地方便我们的开发,但也需要我们理解其工作原理,掌握如何合适地使用各种插件。分页插件和多租户插件是其中典型,它们的运用可以让我们的代码更为简洁、高效,理解和掌握好它们的用法对我们的开发过程有着极其重要的意义。
1161 15
|
XML SQL Java
十二、MyBatis分页插件
十二、MyBatis分页插件
541 17
|
监控 安全 数据库
【YashanDB 知识库】Mybatis-Plus 调用 YashanDB 怎么设置分页
数据库状态分为正常与异常两种情况。当出现异常时,首先查看告警列表确认问题(如实例无法连接),并尝试用数据库用户名和密码登录。若能登录,说明主实例故障已切换至备库;若无法登录或为单节点,则需进一步排查。接着检查监控项,若有数据表明主实例故障,无数据则可能是通信中断。随后检查主机上的服务是否存在,若存在但通信受限,需排查安全设置或网络;若服务不存在,可能因重启或断电导致,需手动启动相关服务。最终在YashanDB列表中确认状态恢复。
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
2821 6
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
SQL Java 关系型数据库
MyBatis篇-分页
本文介绍了多种分页方式,包括自带rowbound内存分页、第三方插件pagehelper(通过修改SQL实现分页)、SQL分页(依赖limit或rownum等关键字)、数组分页(先查询全部数据再用subList分页)、拦截器分页(自定义拦截器为SQL添加分页语句)。最后总结了逻辑分页(内存分页,适合小数据量)和物理分页(直接在数据库层面分页,适合大数据量)的优缺点,强调物理分页优先于逻辑分页。
|
SQL Java 数据库连接
MyBatis 实现分页的机制
MyBatis 的分页机制主要依赖于 `RowBounds` 对象和分页插件。`RowBounds` 实现内存分页,适合小数据量场景,通过设定偏移量和限制条数对结果集进行筛选。而针对大数据量,则推荐使用分页插件(如 PageHelper),实现物理分页。插件通过拦截 SQL 执行,动态修改语句添加分页逻辑,支持多种数据库方言。配置插件后,无需手动调整查询方法即可完成分页操作,提升性能与灵活性。
433 0