Spring MVC+MyBatis+MySQL实现分页功能实例

来讲解一下“Spring MVC+MyBatis+MySQL实现分页功能实例”的完整攻略。

首先,我们需要简单了解一下Spring MVC、MyBatis和MySQL分页功能的基本使用。

Spring MVC

Spring MVC 是 Spring 框架的一个模块,用于开发 Web 应用程序。它是一个基于 MVC 设计模式的框架,提供了一个 Model-View-Controller 架构,可以帮助开发者更好地组织和管理代码。Spring MVC 中的核心组件包括:DispatcherServlet、Controller、ModelAndView 等。其中,DispatcherServlet 是 Spring MVC 的前置处理器,用于接收客户端请求并分发到对应的 Controller 进行处理;Controller 负责处理请求,并根据需要调用 Service 层和 Dao 层中的代码,最终生成响应结果;ModelAndView 用于封装处理结果,包括视图名称和模型对象等。

MyBatis

MyBatis 是一款支持 Java 和 .NET 开发语言的持久层框架,它封装了 JDBC 操作,可以自动完成一系列操作,包括:连接数据库、创建 SQL 语句、执行 SQL 语句、映射结果集和参数,以及管理事务等。MyBatis 中的核心组件包括:SqlSessionFactory、SqlSession、Mapper 等。其中,SqlSessionFactory 是 MyBatis 的核心接口,用于创建 SqlSession;SqlSession 是与数据库交互的主要对象,提供了一系列对数据库的操作方法;Mapper 是使用注解或 XML 配置文件定义 SQL 语句的接口或抽象类。

MySQL分页功能

MySQL 分页功能可以通过 LIMIT 关键字实现,语法格式为:LIMIT offset, length,其中,offset 表示从哪一行开始查询,length 表示查询多少行。具体实现时,需要根据当前页码和每页显示的条数计算 offset 和 length 的值,然后将其拼接到 SQL 语句中进行查询。

以上是 Spring MVC、MyBatis 和 MySQL 分页功能的基本介绍。接下来,让我们来实现一个基于 Spring MVC、MyBatis 和 MySQL 实现分页功能的示例。

实现步骤

第一步:创建 Maven 项目

在 Eclipse 中创建 Maven 项目。在 pom.xml 文件中添加以下依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.1.10.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.49</version>
    </dependency>
</dependencies>

第二步:配置 Spring MVC

在 src/main/resources 目录下创建 springmvc-servlet.xml 文件,并添加以下内容:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <mvc:annotation-driven />

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <mvc:resources mapping="/static/**" location="/static/" />
</beans>

其中, 表示开启注解支持, 标签中的 viewResolver 属性用于配置视图解析器, 标签用于配置静态资源映射。这里我们将视图文件放在 WEB-INF/views 目录下,静态资源放在 static 目录下。

第三步:配置 MyBatis

在 src/main/resources 目录下创建 mybatis-config.xml 文件,并添加以下内容:

<configuration>
    <typeAliases>
        <!-- 配置别名 -->
        <!--<typeAlias type="包名.entity类名" alias="别名"/>-->
    </typeAliases>
    <mappers>
        <!-- 配置 Mapper 文件 -->
        <!--<mapper resource="包名/dao层Java文件.xml"/>-->
    </mappers>
</configuration>

在 pom.xml 文件中添加以下 MyBatis 插件:

<build>
  <plugins>
    <plugin>
      <groupId>org.mybatis.generator</groupId>
      <artifactId>mybatis-generator-maven-plugin</artifactId>
      <version>1.4.0</version>
      <dependencies>
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.49</version>
        </dependency>
      </dependencies>
      <executions>
        <execution>
          <id>Generate MyBatis Artifacts</id>
          <phase>compile</phase>
          <goals>
            <goal>generate</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <configurationFile>
          ${basedir}/src/main/resources/mybatis-generator.xml
        </configurationFile>
        <overwrite>true</overwrite>
      </configuration>
    </plugin>
  </plugins>
</build>

在 src/main/resources 目录下创建 mybatis-generator.xml 文件,并添加以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC
"-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <context id="MySQLTables" targetRuntime="MyBatis3Simple">
        <!-- 数据库连接信息 -->
        <jdbcConnection
                driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/dbname"
                userId="root"
                password="root">
        </jdbcConnection>
        <!-- 对应的 schema -->
        <schema fileName="schema">
            dbname
        </schema>
        <!-- 生成 Model 对象 -->
        <javaModelGenerator targetPackage="包名.entity类名" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- 生成 SQL 语句对应的 Mapper 接口 -->
        <sqlMapGenerator targetPackage="包名.dao层Java文件" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成 Mapper 映射文件 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="包名.dao层Java文件" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 配置表 -->
        <table tableName="表名">
            <property name="useActualColumnNames" value="true"/>
        </table>
    </context>
</generatorConfiguration>

其中,需要将 dbname、包名、entity类名、dao层Java文件、表名等信息根据实际情况进行修改。执行 Maven 命令 mvn mybatis-generator:generate,即可在对应的包名下生成实体类和 Mapper 接口。

第四步:实现分页功能

在 Controller 中添加分页查询的方法:

@RequestMapping("/list")
public ModelAndView list(@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size) {
    ModelAndView modelAndView = new ModelAndView("list");

    // 计算分页信息
    int offset = (page - 1) * size;

    // 执行查询,并设置分页信息
    List<Entity> entities = dao.list(offset, size);
    int total = dao.count();
    int maxPage = (total + size - 1) / size;

    modelAndView.addObject("entities", entities);
    modelAndView.addObject("page", page);
    modelAndView.addObject("size", size);
    modelAndView.addObject("total", total);
    modelAndView.addObject("maxPage", maxPage);

    return modelAndView;
}

其中,@RequestParam 注解用于接收请求参数,defaultValue 表示默认值,@RequestMapping 注解用于指定请求路径,"list" 表示请求的路径为 /list。

在 Dao 层中添加分页查询和统计记录总数的方法:

List<Entity> list(@Param("offset") int offset, @Param("size") int size);

int count();

在对应的 Mapper 文件中编写查询语句:

<select id="list" resultType="包名.entity类名.Entity">
    select *
    from 表名
    limit #{offset}, #{size}
</select>

<select id="count" resultType="int">
    select count(*)
    from 表名
</select>

其中,#{offset} 和 #{size} 表示 MyBatis 的动态占位符,用于接收传入的 offset 和 size 变量,从而实现动态分页查询。

最后,创建视图文件 list.jsp,用于显示分页结果:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>分页列表</title>
</head>
<body>
    <h1>分页列表</h1>
    <table>
        <tr>
            <th>ID</th>
            <th>名称</th>
            <th>创建时间</th>
            <th>更新时间</th>
        </tr>
        <c:forEach items="${entities}" var="entity">
            <tr>
                <td>${entity.id}</td>
                <td>${entity.name}</td>
                <td>${entity.createTime}</td>
                <td>${entity.updateTime}</td>
            </tr>
        </c:forEach>
    </table>
    <br>
    <p>共 ${total} 条记录,${maxPage} 页</p>
    <hr>
    <p>
        <a href="?page=1&size=${size}">首页</a>
        <a href="?page=${page-1}&size=${size}">上一页</a>
        <a href="?page=${page+1}&size=${size}">下一页</a>
        <a href="?page=${maxPage}&size=${size}">末页</a>
    </p>
    <hr>
    <form action="${pageContext.request.contextPath}/list" method="get">
        <input type="text" name="page" value="${page}" size="2">/
        <c:choose>
            <c:when test="${maxPage gt 0}">
                <c:out value="${maxPage}" />
            </c:when>
            <c:otherwise>
                1
            </c:otherwise>
        </c:choose>
        <input type="submit" value="跳转">
        <input type="text" name="size" value="${size}" size="2">
    </form>
</body>
</html>

其中, 标签用于遍历查询结果, 标签用于根据条件选择分页信息的显示方式,

标签用于实现跳转到任意页码的功能。

至此,分页功能就实现了。我们可以通过访问 http://localhost:8080/list?page=1&size=10 来查询首页数据;通过访问 http://localhost:8080/list?page=2&size=10 来查询第二页数据。访问其他页码也是类似的,这里就不一一列举了。

示例说明

这里给出两个示例说明。

  1. 实现动态分页查询

在上述示例中,我们使用了 MyBatis 的动态占位符 #{offset} 和 #{size},从而实现了动态分页查询。当我们需要修改分页大小时,只需修改请求参数中的 size 值即可。这种方式非常灵活,能够满足不同场景下的分页需求。

  1. 显示分页信息

在上述示例中,我们在视图文件 list.jsp 中显示了分页信息,包括当前页码、每页显示数量、总记录数等。同时,我们还实现了跳转到任意页码的功能,让用户能够更加方便地访问指定页码的数据。这种方式能够提高用户体验,让用户更加满意。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring MVC+MyBatis+MySQL实现分页功能实例 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • springmvc中下载中文文件名称为下划线的解决方案

    下面是springmvc中下载中文文件名称为下划线的解决方案的基本步骤: 在Controller中获取文件 @GetMapping(“/download”) public ResponseEntity<ByteArrayResource> downloadFile(HttpServletRequest request) throws IOExce…

    Java 2023年5月20日
    00
  • Java API学习教程之正则表达式详解

    Java API学习教程之正则表达式详解 正则表达式简介 正则表达式是对字符串进行模式匹配的一种语法。通过正则表达式,可以快速的进行字符串匹配,替换操作等。Java通过\java.util.regex.*\包来支持正则表达式。 常用的正则表达式元字符 . – 匹配除换行符以外的任意字符 ^ – 匹配行的开始位置 $ – 匹配行的结束位置 匹配前面的元素零次或…

    Java 2023年5月26日
    00
  • Springboot 整合maven插口调用maven release plugin实现一键打包功能

    下面是对于“Springboot 整合maven插口调用maven release plugin实现一键打包功能”的完整攻略: 整合Springboot与maven插件 在Springboot的pom.xml文件中添加maven插件,并指定release版本号: <build> <plugins> <plugin> &lt…

    Java 2023年5月19日
    00
  • JpaRepository如何实现增删改查并进行单元测试

    JpaRepository是Spring Data JPA中的一个接口,该接口为开发人员提供了一种简单的方式来实现增删改查等常见操作。下面是JpaRepository如何实现增删改查并进行单元测试的完整攻略。 1. 增加数据 JpaRepository提供了一个save()方法来保存一个实体对象。该方法可以用于添加数据。以下是示例代码: @Service p…

    Java 2023年5月20日
    00
  • java自定义拦截器用法实例

    Java自定义拦截器用法实例攻略 简介 在Java开发中,拦截器是非常常见的一种机制,可以在请求被处理之前或之后对请求或响应进行处理。Java中提供了许多基础的拦截器,如Servlet过滤器、Spring拦截器等,但有时我们需要自定义拦截器来实现一些特定的功能或处理某些特定的问题。 本篇攻略将详细讲解Java自定义拦截器的使用方法,包括实现过程、添加配置等内…

    Java 2023年6月2日
    00
  • Java Web端程序实现文件下载的方法分享

    首先我们需要了解Java Web端程序实现文件下载的基本流程。在Java Web项目中,文件下载的基本流程如下: 客户端发送下载请求。 服务器端根据请求的文件路径和文件名,读取文件并将文件流写入response输出流。 客户端接收到服务器返回的文件流后,将文件流写入本地文件。 具体实现方法如下: 首先定义一个Servlet处理文件下载请求,实现Servlet…

    Java 2023年5月19日
    00
  • 详解用JWT对SpringCloud进行认证和鉴权

    详解用JWT对SpringCloud进行认证和鉴权 什么是JWT JWT (JSON Web Token) 是一种开放标准 (RFC 7519),它定义了一种简洁的、自包含的方式,用于在不同的系统之间传递安全信息。JWT 通常由 3 部分组成:头部 (header)、载荷 (payload)、签名 (signature)。其中,头部用于描述 JWT 的元数据…

    Java 2023年5月20日
    00
  • JSP页面IE无法打开Internet 站点…… 已终止操作 的解决方法

    首先这个错误信息一般是因为浏览器对JSP页面的渲染支持有问题或者服务器返回的JSP页面有语法错误等原因导致。下面我来详细讲解一下如何解决JSP页面IE无法打开Internet站点已终止操作的错误。 检查JSP页面语法错误 如果JSP页面存在语法错误,那么浏览器在渲染时就很可能会出现问题。因此,我们需要先检查JSP页面的语法是否正确。一般我们可以使用IDE自带…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部