使用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日

相关文章

  • Android APK反编译技巧深入讲解

    Android APK反编译技巧深入讲解 在许多情况下,我们需要对Android APK进行反编译操作,例如对之前发布的版本进行修改或对开源应用进行研究等等。本文将介绍一些常见的Android APK反编译技巧,以帮助您更好地了解Android APK的内部结构。 步骤一:下载反编译工具 首先,您需要下载一个反编译工具,推荐使用apktool和dex2jar…

    Java 2023年5月26日
    00
  • java导出dbf文件生僻汉字处理方式

    下面是java导出dbf文件生僻汉字处理方式的完整攻略。 总体思路 在java中,如果需要导出dbf文件中含有生僻汉字,需要进行字符集的转换,防止乱码。具体步骤如下: 将生僻汉字以GBK编码存储到List或数组中。 将List或数组中的每个字符转换成Unicode编码,并转换成16进制格式的字符串,存储到新的List或数组中。 使用Apache POI相关类…

    Java 2023年5月26日
    00
  • Spring boot搭建web应用集成thymeleaf模板实现登陆

    下面就是详细讲解Spring Boot搭建Web应用集成Thymeleaf模板实现登录的攻略。 1. 新建Spring Boot项目 首先,打开IDE,新建一个Spring Boot项目。在Maven项目的pom.xml中添加thymeleaf依赖: <dependency> <groupId>org.springframework.…

    Java 2023年5月20日
    00
  • SSH框架网上商城项目第22战之银行图标以及支付页面显示

    SSH框架网上商城项目的支付页面显示需要显示银行图标,具体步骤如下: 银行图标的获取 首先需要获取银行图标。可以通过以下方式获取: 在网上搜寻对应银行的官网,找到银行的Logo并下载; 在开发者工具中查看银行网页中的Logo图片地址,然后下载该图片; 下载的银行图标需要保存在项目的资源目录中,如webapp/resources/img/bank/。 在支付页…

    Java 2023年5月20日
    00
  • Java中反射的学习笔记分享

    关于Java中反射的学习笔记分享,下面就详细讲解一下完整攻略。 什么是Java中的反射 Java中的反射机制是指在运行时动态地获取一个类的各种信息的能力。它能够在程序运行时直接操作对象的内部属性,调用对象的方法,它使得原本在编译时就需要确定的类名、方法名等信息可以在运行时通过反射机制动态获取。 Java中反射的使用场景 1.在设计一些通用使用的代码时,比如动…

    Java 2023年5月26日
    00
  • 解决硬盘卡死问题!希捷固件刷写全攻略

    解决硬盘卡死问题!希捷固件刷写全攻略 如果你使用希捷硬盘遇到了卡死问题,可能是由于固件出现了问题。如果这是你的问题,那么刷写固件可能是解决问题的方法。这篇攻略将会讲解如何刷写希捷硬盘的固件。 步骤一:确定硬盘型号和固件版本 在开始刷写过程之前,你需要确定自己硬盘的型号和固件版本。你可以通过命令行查看序列号,也可以在硬盘上查找型号和固件版本号。 例如,在命令行…

    Java 2023年6月15日
    00
  • 如何配置类路径?

    以下是关于如何配置类路径的完整使用攻略: 什么是类路径? Java程序在运行时需要加载类文件,而类文件的位置就是通过类路径来指定的。类路径可以包含多个路径,每个路径之间使用分隔符(如冒号或分号)分隔。类路径可以包含目录和JAR文件。 如何配置类路径? 下面介绍三种常见的配置类路径的方法。 方法一:使用命令行参数设置类路径 可以通过命令行参数设置类路径。例如,…

    Java 2023年5月12日
    00
  • 详解Java的Spring框架中bean的注入集合

    关于“详解Java的Spring框架中bean的注入集合”的攻略,我将会分为以下几个步骤来进行讲解: 什么是Spring框架中的bean? Spring中bean的注入集合方式有哪些? 集合注入的使用示例。 下面我们将进入详细讲解的部分: 1. 什么是Spring框架中的bean? Spring框架是目前广泛使用的Java企业应用开发框架,其中的bean指S…

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