Struts 2 与 Hibernate 的完美邂逅:如何无缝集成两大框架,轻松玩转高效 CRUD 操作?

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【8月更文挑战第31天】本文通过具体示例介绍了如何在 Struts 2 中整合 Hibernate,实现基本的 CRUD 操作。首先创建 Maven 项目并添加相关依赖,接着配置 Hibernate 并定义实体类及其映射文件。然后创建 DAO 接口及实现类处理数据库操作,再通过 Struts 2 的 Action 类处理用户请求。最后配置 `struts.xml` 文件并创建 JSP 页面展示用户列表及编辑表单。此示例展示了如何配置和使用这两个框架,使代码更加模块化和可维护。

Struts 2 和 Hibernate 是 Java Web 开发领域中两个非常流行的框架。Struts 2 主要负责处理 Web 层的请求,而 Hibernate 则专注于数据持久化。将这两个框架结合起来,可以构建出高效且易于维护的企业级应用。本文将通过一个具体的示例来展示如何在 Struts 2 中整合 Hibernate,以实现基本的 CRUD(创建、读取、更新、删除)操作。

首先,创建一个新的 Maven 项目,并添加 Struts 2 和 Hibernate 的依赖。在 pom.xml 文件中加入以下依赖:

<dependencies>
    <!-- Struts 2 Core -->
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-core</artifactId>
        <version>2.6.11</version>
    </dependency>

    <!-- Hibernate Core -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.4.21.Final</version>
    </dependency>

    <!-- MySQL Connector -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.23</version>
    </dependency>

    <!-- Other dependencies -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
</dependencies>
AI 代码解读

接下来,配置 Hibernate。在 src/main/resources 目录下创建 hibernate.cfg.xml 文件,配置数据库连接信息和其他设置。

<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/struts_hibernate_crud?useSSL=false&amp;serverTimezone=UTC</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">password</property>

        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">update</property>

        <mapping class="com.example.model.User"/>
    </session-factory>
</hibernate-configuration>
AI 代码解读

定义一个简单的实体类 User,并为其创建 Hibernate 映射文件 User.hbm.xml

package com.example.model;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "users")
public class User {
   
    private Long id;
    private String name;
    private String email;

    @Id
    public Long getId() {
   
        return id;
    }

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

    public String getName() {
   
        return name;
    }

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

    public String getEmail() {
   
        return email;
    }

    public void setEmail(String email) {
   
        this.email = email;
    }
}
AI 代码解读

对应的映射文件如下:

<hibernate-mapping>
    <class name="com.example.model.User" table="users">
        <id name="id" column="id">
            <generator class="increment"/>
        </id>
        <property name="name" column="name"/>
        <property name="email" column="email"/>
    </class>
</hibernate-mapping>
AI 代码解读

现在,创建一个 DAO 接口和实现类来处理数据库操作。

package com.example.dao;

import com.example.model.User;
import java.util.List;

public interface UserDao {
   
    void save(User user);
    User findById(Long id);
    List<User> findAll();
    void update(User user);
    void delete(Long id);
}
AI 代码解读
package com.example.dao.impl;

import com.example.dao.UserDao;
import com.example.model.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import javax.persistence.EntityManager;
import java.util.List;

@Repository
public class UserDaoImpl implements UserDao {
   

    @Autowired
    private EntityManager entityManager;

    @Override
    public void save(User user) {
   
        entityManager.persist(user);
    }

    @Override
    public User findById(Long id) {
   
        return entityManager.find(User.class, id);
    }

    @Override
    public List<User> findAll() {
   
        return entityManager.createQuery("from User", User.class).getResultList();
    }

    @Override
    public void update(User user) {
   
        entityManager.merge(user);
    }

    @Override
    public void delete(Long id) {
   
        User user = findById(id);
        if (user != null) {
   
            entityManager.remove(user);
        }
    }
}
AI 代码解读

接下来,创建一个 Struts 2 的 Action 类来处理用户的请求。这里使用 Spring 来注入 DAO 实例。

package com.example.action;

import com.example.dao.UserDao;
import com.example.model.User;
import org.apache.struts2.convention.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

@Namespace("/")
@ParentPackage("struts-default")
@Result(path = "/WEB-INF/jsp/user.jsp", name = "success")

public class UserAction {
   

    @Autowired
    private UserDao userDao;

    private User user;
    private List<User> users;

    public String execute() {
   
        users = userDao.findAll();
        return SUCCESS;
    }

    public String create() {
   
        userDao.save(user);
        return "success";
    }

    public String edit() {
   
        user = userDao.findById(user.getId());
        return "edit";
    }

    public String update() {
   
        userDao.update(user);
        return "success";
    }

    public String delete() {
   
        userDao.delete(user.getId());
        return "success";
    }

    // Getters and setters
    public User getUser() {
   
        return user;
    }

    public void setUser(User user) {
   
        this.user = user;
    }

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

    public void setUsers(List<User> users) {
   
        this.users = users;
    }
}
AI 代码解读

最后,配置 Struts 2 的 struts.xml 文件,定义 Action 和视图路径。

<package name="default" namespace="/" extends="struts-default">
    <action name="user" class="com.example.action.UserAction">
        <result name="success">/WEB-INF/jsp/user.jsp</result>
    </action>

    <action name="user_create" class="com.example.action.UserAction">
        <result name="success">/WEB-INF/jsp/user.jsp</result>
    </action>

    <action name="user_edit" class="com.example.action.UserAction">
        <result name="edit">/WEB-INF/jsp/edit_user.jsp</result>
    </action>

    <action name="user_update" class="com.example.action.UserAction">
        <result name="success">/WEB-INF/jsp/user.jsp</result>
    </action>

    <action name="user_delete" class="com.example.action.UserAction">
        <result name="success">/WEB-INF/jsp/user.jsp</result>
    </action>
</package>
AI 代码解读

user.jsp 页面中展示用户列表,并提供链接来编辑或删除用户。

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>User Management</title>
</head>
<body>
    <h1>User List</h1>
    <table border="1">
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Email</th>
            <th>Action</th>
        </tr>
        <c:forEach var="user" items="${users}">
            <tr>
                <td>${user.id}</td>
                <td>${user.name}</td>
                <td>${user.email}</td>
                <td>
                    <a href="<c:url value='/user_edit.action'/>?id=${user.id}">Edit</a>
                    <a href="<c:url value='/user_delete.action'/>?id=${user.id}">Delete</a>
                </td>
            </tr>
        </c:forEach>
    </table>
    <form action="<c:url value='/user_create.action'/>" method="post">
        <input type="text" name="user.name" placeholder="Enter Name" required>
        <input type="text" name="user.email" placeholder="Enter Email" required>
        <input type="submit" value="Create">
    </form>
</body>
</html>
AI 代码解读

edit_user.jsp 页面中提供表单来修改用户信息。

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>Edit User</title>
</head>
<body>
    <h1>Edit User</h1>
    <form action="<c:url value='/user_update.action'/>" method="post">
        <input type="hidden" name="user.id" value="${user.id}">
        <label for="name">Name:</label>
        <input type="text" name="user.name" value="${user.name}" required>
        <br/>
        <label for="email">Email:</label>
        <input type="text" name="user.email" value="${user.email}" required>
        <br/>
        <input type="submit" value="Update">
    </form>
</body>
</html>
AI 代码解读

通过上述步骤,你已经成功地在 Struts 2 中集成了 Hibernate,并实现了基本的 CRUD 操作。这个示例不仅展示了如何配置和使用这两个框架,还介绍了如何通过 DAO 层分离业务逻辑和数据访问逻辑,使得代码更加模块化和可维护。掌握了这些知识后,你可以进一步探索 Struts 2 和 Hibernate 的高级功能,以满足更复杂的应用需求。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
320
分享
相关文章
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
141 61
如何在Python Web开发中确保应用的安全性?
如何在Python Web开发中确保应用的安全性?
打造高效的Web Scraper:Python与Selenium的完美结合
本文介绍如何使用Python结合Selenium,通过代理IP、设置Cookie和User-Agent抓取BOSS直聘的招聘信息,包括公司名称、岗位、要求和薪资。这些数据可用于行业趋势、人才需求、企业动态及区域经济分析,为求职者、企业和分析师提供宝贵信息。文中详细说明了环境准备、代理配置、登录操作及数据抓取步骤,并提醒注意反爬虫机制和验证码处理等问题。
打造高效的Web Scraper:Python与Selenium的完美结合
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
VideoRefer:阿里达摩院开源视频对象感知与推理框架,可集成 VLLM 提升其空间和时间理解能力
VideoRefer 是浙江大学与阿里达摩学院联合推出的视频对象感知与推理技术,支持细粒度视频对象理解、复杂关系分析及多模态交互,适用于视频剪辑、教育、安防等多个领域。
242 17
VideoRefer:阿里达摩院开源视频对象感知与推理框架,可集成 VLLM 提升其空间和时间理解能力
Python Web 框架 FastAPI
FastAPI 是一个现代的 Python Web 框架,专为快速构建 API 和在线应用而设计。它凭借速度、简单性和开发人员友好的特性迅速走红。FastAPI 支持自动文档生成、类型提示、数据验证、异步操作和依赖注入等功能,极大提升了开发效率并减少了错误。安装简单,使用 pip 安装 FastAPI 和 uvicorn 即可开始开发。其优点包括高性能、自动数据验证和身份验证支持,但也存在学习曲线和社区资源相对较少的缺点。
229 15
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
134 61

热门文章

最新文章

下一篇
oss创建bucket