使用hibernate和struts2实现分页功能的示例

使用Hibernate和Struts2实现分页功能可以分为以下几个步骤:

  1. 添加依赖

在pom.xml文件中添加Hibernate和Struts2的依赖,示例代码如下:

<dependencies>
    <!-- Hibernate -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.4.32.Final</version>
    </dependency>

    <!-- Struts2 -->
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-core</artifactId>
        <version>2.5.26</version>
    </dependency>
</dependencies>
  1. 配置Hibernate

在项目的配置文件中添加Hibernate的配置信息,包括数据源、映射文件、SessionFactory等,示例代码如下:

<hibernate-configuration>
    <session-factory>
        <!-- 数据源配置 -->
        <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test_db?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>

        <!-- 映射文件 -->
        <mapping class="com.example.User"/>

        <!-- SessionFactory配置 -->
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>
    </session-factory>
</hibernate-configuration>
  1. 编写数据访问层代码

使用Hibernate实现数据访问层,包括实体类、DAO类、以及相关的HQL查询,示例代码如下:

@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "name")
    private String name;

    @Column(name = "age")
    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

public class UserDao {
    private SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public List<User> findPage(int page, int size) {
        Session session = sessionFactory.openSession();
        Query query = session.createQuery("from User order by id");
        query.setFirstResult((page - 1) * size);
        query.setMaxResults(size);
        List<User> users = query.list();
        session.close();
        return users;
    }

    public Long getCount() {
        Session session = sessionFactory.openSession();
        Query query = session.createQuery("select count(*) from User");
        Long count = (Long) query.uniqueResult();
        session.close();
        return count;
    }
}
  1. 编写业务逻辑层代码

使用Struts2实现业务逻辑层,包括Action类和相应的视图,示例代码如下:

public class UserAction extends ActionSupport {
    private UserDao userDao;
    private List<User> users;
    private int total;
    private int page;
    private int size = 10;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public List<User> getUsers() {
        return users;
    }

    public int getTotal() {
        return total;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public String execute() {
        users = userDao.findPage(page, size);
        total = (int) (userDao.getCount() + size - 1) / size;
        return SUCCESS;
    }
}
  1. 编写视图

使用JSP编写视图,包括显示用户列表和分页条,示例代码如下:

<%@ taglib prefix="s" uri="/struts-tags" %>

<ul>
<s:iterator value="users">
    <li><s:property value="name"/> (age: <s:property value="age"/>)</li>
</s:iterator>
</ul>

<div class="pagination">
<s:url var="url" value="/user.action"/>
<s:set name="params" value="'&amp;size='+size"/>

<s:if test="page==1">
    <span class="disabled">&laquo;</span>
</s:if>
<s:else>
    <a href="<s:url includeParams="true"><s:param name="page" value="1"/><s:param name="size" value="%{#size}"/></s:url>">&laquo;</a>
</s:else>

<s:iterator value="1..total">
    <s:if test="page==#this">
        <span class="current"><s:property value="#this"/></span>
    </s:if>
    <s:else>
        <a href="<s:url includeParams="true"><s:param name="page" value="%{#this}"/><s:param name="size" value="%{#size}"/></s:url>"><s:property value="#this"/></a>
    </s:else>
</s:iterator>

<s:if test="page==total">
    <span class="disabled">&raquo;</span>
</s:if>
<s:else>
    <a href="<s:url includeParams="true"><s:param name="page" value="%{total}"/><s:param name="size" value="%{#size}"/></s:url>">&raquo;</a>
</s:else>
</div>

至此,使用Hibernate和Struts2实现分页功能的示例就完成了。以下是两个示例:

示例1:查询用户列表并分页显示

public class UserAction extends ActionSupport {
    private UserDao userDao;
    private List<User> users;
    private int total;
    private int page;
    private int size = 10;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public List<User> getUsers() {
        return users;
    }

    public int getTotal() {
        return total;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public String execute() {
        users = userDao.findPage(page, size);
        total = (int) (userDao.getCount() + size - 1) / size;
        return SUCCESS;
    }
}

示例2:在用户列表中增加搜索功能并分页显示搜索结果

public class UserAction extends ActionSupport {
    private UserDao userDao;
    private List<User> users;
    private int total;
    private int page;
    private int size = 10;
    private String search;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public List<User> getUsers() {
        return users;
    }

    public int getTotal() {
        return total;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public void setSearch(String search) {
        this.search = search;
    }

    public String execute() {
        users = userDao.findPage(page, size, search);
        total = (int) (userDao.getCount(search) + size - 1) / size;
        return SUCCESS;
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用hibernate和struts2实现分页功能的示例 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java 时间格式转换之impleDateFormat与Data API解析与使用

    Java 时间格式转换之 SimpleDateFormat 与 Date API 解析与使用 一、简介 在Java中,日期时间格式化和解析的主要API是 SimpleDateFormat 与 Date。 SimpleDateFormat 类可以将 Java 的日期对象转换为指定格式的字符串,也可以将格式化后的日期字符串转换成 Java 的日期对象。 Date…

    Java 2023年5月20日
    00
  • java 截取字符串(判断汉字)

    下面为你详细讲解Java截取字符串的攻略。 什么是字符串截取? 在Java中,字符串截取就是从一个源字符串中获取指定的一段子字符串。常见的应用场景包括翻译、搜索、字符串处理等。 字符串截取的方法 Java中有两种方法可以截取字符串,分别是substring()和subSequence()方法。 substring()方法 该方法的使用格式为: String …

    Java 2023年5月27日
    00
  • springboot各种下载文件的方式汇总

    Spring Boot各种下载文件的方式汇总攻略 在Web应用程序中,下载文件是常见的功能之一。Spring Boot提供了多种方式来下载文件。本文将汇总介绍Spring Boot中各种下载文件的方式。 1. 使用OutputStream下载文件 最简单的方式是使用OutputStream将文件写入到HttpServletResponse的输出流,并将相应的…

    Java 2023年5月19日
    00
  • SpringMvc获取请求头请求体消息过程解析

    Spring MVC获取请求头请求体消息过程解析 什么是请求头和请求体 在HTTP协议中,请求报文分为请求头和请求体两部分。其中请求头包含了一些元数据,如请求方式、请求地址、请求头部信息等;而请求体则是一些用作请求参数的数据,如表单提交、json数据等。 Spring MVC获取请求头信息 Spring MVC框架中,我们可以通过@RequestHeader…

    Java 2023年6月15日
    00
  • IDEA快速搭建Java开发环境的教程图解

    首先,我们需要了解以下一些基本概念: JDK:Java开发工具包,是Java开发的基础包,包含编译器、运行环境等。 IDEA:IntelliJ IDEA,是一款由JetBrains开发的集成开发环境(IDE),专门用于Java开发。 Maven:是一个基于Java的项目管理工具,它可以方便地维护项目的依赖关系、自动化构建、测试、打包等操作。 以下是详细的攻略…

    Java 2023年5月20日
    00
  • Spring Boot高级教程之Spring Boot连接MySql数据库

    连接数据库是Web应用程序开发中的一个重要环节。在Spring Boot应用程序中,我们可以使用Spring Data JPA来连接MySQL数据库。以下是实现Spring Boot连接MySQL数据库的完整攻略: 添加依赖 在Spring Boot应用程序中,我们需要添加以下依赖来连接MySQL数据库: <dependency> <gro…

    Java 2023年5月15日
    00
  • Java的Struts框架报错“NullChainException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“NullChainException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置,则可能会出现此。在这种情况下,需要检查文件以解决此问题。 链名称:如果链名称不正确,则可能出现此。在这种情况下,需要检查链名称以解决此问题。 以下是两个实例: 例 1 如果配置文件中没有正确配置,则…

    Java 2023年5月5日
    00
  • C#如何从byte[]中直接读取Structure实例详解

    这里是一份完整的攻略,教你在 C# 中如何从 byte[] 中直接读取 Structure 实例。 什么是结构体(Structure) 结构体是 C# 中一种可自定义数据类型。可以将结构体看作是一种轻量级的类,它包含了一组相关的数据类型,可以通过单个变量进行访问和管理。每个结构体变量在内存中都是独立的。 如何从byte[]中直接读取Structure实例 由…

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