SpringMVC+Mybatis实现的Mysql分页数据查询的示例

接下来我将详细讲解“SpringMVC+Mybatis实现的Mysql分页数据查询的示例”的完整攻略,过程中将给出两条示例说明。

准备工作

在开始实现分页数据查询之前,需要确保以下几点:

  • JDK版本在1.8及以上
  • Maven依赖管理工具
  • SpringMVC框架
  • Mybatis持久层框架
  • Mysql数据库

添加依赖

在Maven的pom.xml文件中添加SpringMVC和Mybatis的相关依赖,如下所示:

<!-- SpringMVC依赖 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.5.RELEASE</version>
</dependency>

<!-- Mybatis依赖 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.4</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.22</version>
</dependency>

数据库准备

在Mysql数据库中创建一张示例表,如下所示:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

插入示例数据,如下所示:

INSERT INTO `user` (`username`, `password`, `age`) VALUES ('Alice', '123456', 18);
INSERT INTO `user` (`username`, `password`, `age`) VALUES ('Bob', '123456', 20);
INSERT INTO `user` (`username`, `password`, `age`) VALUES ('Charlie', '123456', 22);
INSERT INTO `user` (`username`, `password`, `age`) VALUES ('David', '123456', 24);
INSERT INTO `user` (`username`, `password`, `age`) VALUES ('Ellie', '123456', 26);

配置Mybatis

在SpringMVC项目中添加Mybatis的配置文件,如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

配置Mybatis的Mapper接口,如下所示:

public interface UserMapper {
    List<User> findAllUsers();
    int countAllUsers();
    List<User> findUsersByPage(@Param("offset") int offset, @Param("limit") int limit);
}

编写Mapper接口的对应的SQL语句,如下所示:

<mapper namespace="com.mapper.UserMapper">
    <resultMap type="com.pojo.User" id="userResultMap">
        <id column="id" property="id"/>
        <result column="username" property="username"/>
        <result column="password" property="password"/>
        <result column="age" property="age"/>
    </resultMap>

    <select id="findAllUsers" resultMap="userResultMap">
        select * from user
    </select>

    <select id="countAllUsers" resultType="int">
        select count(*) from user
    </select>

    <select id="findUsersByPage" parameterType="map" resultMap="userResultMap">
        select * from user limit #{offset}, #{limit}
    </select>
</mapper>

实现数据分页查询

在Controller层中编写实现数据分页查询的方法,如下所示:

@RequestMapping("/findAllUsersByPage")
public String findAllUsersByPage(@RequestParam(defaultValue = "1") int currentPage, Model model) {
    int limit = 2;
    int offset = (currentPage - 1) * limit;
    List<User> users = userMapper.findUsersByPage(offset, limit);
    int totalPage = (int) Math.ceil((double) userMapper.countAllUsers() / limit);
    model.addAttribute("currentPage", currentPage);
    model.addAttribute("totalPage", totalPage);
    model.addAttribute("users", users);
    return "list";
}

在页面中添加分页的HTML代码,如下所示:

<nav>
  <ul class="pagination">
    <li class="page-item"><a class="page-link" href="?currentPage=1">首页</a></li>
    <li class="page-item"><a class="page-link" href="?currentPage=${currentPage - 1}">上一页</a></li>
    <c:forEach begin="1" end="${totalPage}" var="i">
      <li class="page-item ${currentPage == i ? 'active' : ''}"><a class="page-link" href="?currentPage=${i}">${i}</a></li>
    </c:forEach>
    <li class="page-item"><a class="page-link" href="?currentPage=${currentPage + 1}">下一页</a></li>
    <li class="page-item"><a class="page-link" href="?currentPage=${totalPage}">尾页</a></li>
  </ul>
</nav>

示例说明

以下为两条示例说明:

示例1:修改每页显示的数据数量

在Controller层的findAllUsersByPage方法中修改每页显示的数据数量,如下所示:

int limit = 5; // 修改每页显示的数据数量
int offset = (currentPage - 1) * limit;
List<User> users = userMapper.findUsersByPage(offset, limit);
int totalPage = (int) Math.ceil((double) userMapper.countAllUsers() / limit);
model.addAttribute("currentPage", currentPage);
model.addAttribute("totalPage", totalPage);
model.addAttribute("users", users);

示例2:实现高级别的查询功能

在Mapper接口中添加高级别的查询方法,如下所示:

List<User> findUsersByUsernameAndPassword(@Param("username") String username, @Param("password") String password);

在Mapper接口的对应的SQL语句中添加高级别的查询方法,如下所示:

<select id="findUsersByUsernameAndPassword" parameterType="map" resultMap="userResultMap">
    select * from user where username=#{username} and password=#{password}
</select>

在Controller层中编写高级别的查询方法,如下所示:

@RequestMapping("/findUsersByUsernameAndPassword")
public String findUsersByUsernameAndPassword(String username, String password, Model model) {
    List<User> users = userMapper.findUsersByUsernameAndPassword(username, password);
    model.addAttribute("users", users);
    return "list";
}

以上就是“SpringMVC+Mybatis实现的Mysql分页数据查询的示例”的完整攻略了,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringMVC+Mybatis实现的Mysql分页数据查询的示例 - Python技术站

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

相关文章

  • Java模板方法模式定义算法框架

    Markdown语法: Java模板方法模式定义算法框架 定义 在一个抽象类中定义好算法执行的骨架,而将具体的算法实现留给子类去实现。这种模式可以很好地定义算法的框架,并且让子类对具体算法的实现进行插件式的扩展。 实现 我们以制作咖啡和茶为例子来说明模板方法的实现: 首先定义一个抽象类 public abstract class Beverage { // …

    Java 2023年5月26日
    00
  • java通过控制鼠标实现屏幕广播的方法

    Java 通过控制鼠标实现屏幕广播可以通过 Java AWT(Abstract Window Toolkit)工具包中的 Robot 类实现。 具体步骤如下: 步骤一:导入相关类 import java.awt.Robot; import java.awt.Toolkit; import java.awt.Rectangle; import java.awt…

    Java 2023年5月23日
    00
  • 如何写好一个Spring组件的实现步骤

    下面我将为您详细讲解如何写好一个Spring组件的实现步骤。 1. 设计接口 首先,我们需要设计组件的接口。组件的接口应该清晰明了,符合单一职责原则,以及接口隔离原则。在设计接口时,可以参考现有的类库或其他组件的设计。 例如,我们想要编写一个邮件发送组件,我们可以先设计下面的接口: public interface MailSender { void sen…

    Java 2023年5月19日
    00
  • Spring纯Java配置集成kafka代码实例

    下面我将详细讲解如何使用Spring纯Java配置集成kafka,包括以下步骤: 添加依赖 配置Kafka 发送消息 接收消息 1. 添加依赖 首先,我们需要在项目的pom.xml中添加kafka相关的依赖,如下所示: <dependency> <groupId>org.springframework.kafka</groupI…

    Java 2023年5月19日
    00
  • Java中如何正确重写equals方法

    Java中的equals方法通常需要被重写,以便进行对象之间的比较。正确重写equals方法不仅可以提高代码质量,而且可以避免因错误的比较导致的程序错误。下面是Java中如何正确重写equals方法的完整攻略。 1. 理解equals方法 在开始重写equals方法之前,我们需要先理解equals方法的作用以及如何使用它来比较两个对象。在Java中,equa…

    Java 2023年5月26日
    00
  • 详解SpringMVC 基础教程 简单入门实例

    《详解SpringMVC 基础教程》是一篇介绍SpringMVC框架的文章,本文将为读者提供完整攻略,以供参考和学习。 SpringMVC 简介 SpringMVC是基于MVC设计模式的Web框架,它能够帮助开发者快速地搭建Web应用,并提供了丰富的标签和注解,使得开发Web应用变得更加简单。其优点包括组件化、灵活性、可重用性等。 SpringMVC 基础教…

    Java 2023年5月16日
    00
  • Spring boot @RequestBody数据传递过程详解

    下面我就为您详细讲解 “Spring Boot @RequestBody 数据传递过程详解” 的攻略。 什么是 @RequestBody ? @RequestBody 是 Spring MVC 中的一个注解,用于获取 HTTP 请求 Body 中的数据。在 Spring Boot 中,@RequestBody 可以和 @RestController 注解一起…

    Java 2023年5月26日
    00
  • Java中Stream流去除List重复元素的方法

    首先要说明一下,Java中的Stream流是Java8中新增的一种函数式操作流程,主要用来对集合进行函数式操作,它可以对集合进行一些链式操作,比如筛选、分组、排序、去重等。 List去重,在Java8中,可以借助Stream流,具体步骤如下: 使用Stream.builder()来构造一个Stream.Builder对象; 通过builder对象调用add方…

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