springmvc 分页查询的简单实现示例代码

下面是完整的“springmvc 分页查询的简单实现示例代码”的攻略:

1. 简介

Spring MVC 是一个基于 Java 的 Web 应用程序框架,而分页查询则是 Web 应用程序中常用的功能之一。本文将向您展示如何在 Spring MVC 中实现简单的分页查询功能。

2. 实现步骤

2.1 添加 jar 包

在项目的 pom.xml 中添加以下依赖:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>${spring-data-jpa.version}</version>
</dependency>

2.2 实体类

假设我们要查询的实体是 User,我们需要写一个 User 实体类。

@Entity
@Table(name = "user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @Column
    private String username;

    @Column
    private String password;

    @Column
    private String email;

    //省略 getter 和 setter 方法
}

2.3 DAO 层

写一个 UserDao 接口和一个 UserDaoImpl 类,用于查询 User 实体类。

public interface UserDao extends JpaRepository<User, Long> {
}

@Repository
public class UserDaoImpl {

    @PersistenceContext
    private EntityManager entityManager;

    public List<User> findUsersByPage(int pageNo, int pageSize) {
        String jpql = "select u from User u";
        TypedQuery<User> query = entityManager.createQuery(jpql, User.class);
        query.setFirstResult((pageNo - 1) * pageSize);
        query.setMaxResults(pageSize);
        return query.getResultList();
    }

    public Long getUserCount() {
        String jpql = "select count(u) from User u";
        Query query = entityManager.createQuery(jpql);
        return (Long) query.getSingleResult();
    }

}

2.4 服务层

由于我们查询的是 User 实体类,所以需要写一个 UserService 以及一个 UserServiceImpl 类。

public interface UserService {

    List<User> findUsersByPage(int pageNo, int pageSize);

    Long getUserCount();

}

@Service
@Transactional
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    public List<User> findUsersByPage(int pageNo, int pageSize) {
        return userDao.findUsersByPage(pageNo, pageSize);
    }

    @Override
    public Long getUserCount() {
        return userDao.getUserCount();
    }

}

2.5 控制器层

最后,我们需要在控制器层添加一个方法,用于获取分页数据。

@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/list", method = RequestMethod.GET)
    public String list(@RequestParam(value = "pageNo", defaultValue = "1") int pageNo,
                       @RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
                       ModelMap model) {
        List<User> users = userService.findUsersByPage(pageNo, pageSize);
        Long count = userService.getUserCount();
        model.addAttribute("users", users);
        model.addAttribute("pageSize", pageSize);
        model.addAttribute("currentPage", pageNo);
        model.addAttribute("totalPage", (count + pageSize - 1) / pageSize);
        return "user/list";
    }

}

2.6 页面

在 /WEB-INF/views/user/list.jsp 中添加以下代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
    <head>
        <title>User List</title>
    </head>
    <body>
        <table border="1">
            <tr>
                <td>ID</td>
                <td>Username</td>
                <td>Password</td>
                <td>Email</td>
            </tr>
            <c:forEach items="${users}" var="user">
                <tr>
                    <td>${user.id}</td>
                    <td>${user.username}</td>
                    <td>${user.password}</td>
                    <td>${user.email}</td>
                </tr>
            </c:forEach>
        </table>
        <br>
        <c:if test="${totalPage > 1}">
            <c:url value="/user/list" var="url">
                <c:param name="pageSize" value="${pageSize}"/>
            </c:url>
            <c:forEach var="i" begin="1" end="${totalPage}">
                <li><a href="${url}&amp;pageNo=${i}">${i}</a></li>
            </c:forEach>
        </c:if>
    </body>
</html>

3. 总结

至此,本文介绍了如何在 Spring MVC 中实现简单的分页查询功能。在代码实现的过程中,我们需要用到 JPA、Controller、Service、Model 等相关的技术。具体实现步骤比较简单,但需要注意细节。如果您有需要,可以将本实现示例代码修改为适合自己的应用程序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springmvc 分页查询的简单实现示例代码 - Python技术站

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

相关文章

  • Kafka producer端开发代码实例

    下面是详细的Kafka producer端开发代码实例攻略: 1. 搭建开发环境 首先,需要搭建Kafka的开发环境。可以参考官方文档:http://kafka.apache.org/quickstart。 2. 引入Kafka的依赖库 在Maven项目中,需要引入以下依赖: <dependency> <groupId>org.apa…

    Java 2023年5月20日
    00
  • 一文带你了解如何正确使用MyBatisPlus

    一文带你了解如何正确使用MyBatis Plus MyBatis Plus 是 MyBatis 的增强工具,在 MyBatis 的基础上,提供了更加便捷的方法和功能。本文将介绍如何正确使用 MyBatis Plus,包括安装、配置、使用和优化等方面。 安装和配置 在使用 MyBatis Plus 之前,需要进行一些准备工作,包括 Maven 依赖的配置和配置…

    Java 2023年5月20日
    00
  • Java获取当前操作系统的信息实例代码

    获取当前操作系统的信息是Java程序开发中常用的功能,本文将介绍如何实现这一功能,并提供两个示例。 一、Java获取操作系统信息的方式 Java获取操作系统信息的方式有多种,以下列出常见的几种方式: 使用System.getProperty(“os.name”)方法获取操作系统的名称; 使用System.getProperty(“os.version”)方法…

    Java 2023年5月23日
    00
  • Spring Boot实战之模板引擎

    SpringBoot实战之模板引擎 模板引擎是用于生成动态HTML内容的工具,它将模板文件和数据进行结合,生成最终的HTML文档,常见的模板引擎有Thymeleaf、FreeMarker、Velocity等。在SpringBoot框架中,可以非常方便地集成各种模板引擎,本文将重点介绍如何使用Thymeleaf和FreeMarker模板引擎。 Thymelea…

    Java 2023年5月15日
    00
  • Java常用命令汇总

    Java常用命令汇总攻略 Java是一种高级编程语言,由于其稳定性和跨平台性能备受欢迎,因此成为了许多软件的首选语言。针对Java的常用命令,本文旨在为初学者提供帮助以及提高Java编程效率。下面将对Java常用命令进行详细讲解。 Java编译命令 Java编写的代码在开发完成后需要编译成可执行的文件。下面是Java编译命令的格式和用法: javac [op…

    Java 2023年5月19日
    00
  • SpringMVC 传日期参数到后台的实例讲解

    在 Spring MVC 中,我们可以使用多种方式来传递日期参数到后台,包括使用 @DateTimeFormat 注解、使用 Converter 接口、使用 Formatter 接口等。本文将详细讲解 Spring MVC 如何传递日期参数到后台,包括如何使用 @DateTimeFormat 注解、使用 Converter 接口、使用 Formatter 接…

    Java 2023年5月18日
    00
  • 只需两步实现Eclipse+Maven快速构建第一个Spring Boot项目

    我会详细讲解“只需两步实现Eclipse+Maven快速构建第一个Spring Boot项目”的完整攻略,过程中会包含两条示例,供大家参考。 1. 新建Maven工程 打开Eclipse,选择File -> New -> Maven Project 在弹出的窗口中,选择archetype,并在Search框中输入“spring-boot”,选择最…

    Java 2023年5月19日
    00
  • Java线程中sleep和wait的区别详细介绍

    下面详细讲解Java线程中sleep和wait的区别。 sleep和wait的区别 等待方式不同 sleep()方法是线程的静态方法,通过该方法可以使当前线程暂停指定的时间,但不会释放已经持有的锁。wait()方法是Object类中的方法,通过该方法可以使线程等待其它线程通知其被唤醒,同时会释放当前持有的锁。 调用位置不同 sleep()方法可以在任何位置调…

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