📜  Struts 2和Hibernate集成(1)

📅  最后修改于: 2023-12-03 15:20:22.172000             🧑  作者: Mango

Struts 2和Hibernate集成

在开发Web应用程序时,常常需要使用到数据库来保存和读取数据。Hibernate是一个流行的数据库访问框架,它可以帮助我们处理底层SQL语句,并提供了方便的对象关系映射(ORM)功能。而Struts 2是一个开源的Java Web应用程序框架,它可以帮助我们处理Web应用程序中的各种请求和响应。

在本文中,我们将介绍如何在Struts 2应用程序中集成Hibernate框架,以实现更方便的数据库访问。

步骤一:添加必要的依赖项

我们需要在项目中添加以下依赖项,以便能够使用Hibernate框架:

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

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.4.32.Final</version>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-c3p0</artifactId>
    <version>5.4.32.Final</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
</dependency>

其中,hibernate-corehibernate-entitymanagerhibernate-c3p0是Hibernate框架的核心依赖项,mysql-connector-java是MySQL数据库的驱动程序。

步骤二:配置Hibernate

src/main/resources目录下,创建一个名为hibernate.cfg.xml的文件,并添加以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<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</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">create</property>
    </session-factory>
</hibernate-configuration>

这个文件配置了Hibernate框架需要连接的数据库的信息,包括数据库的URL、用户名、密码以及数据库方言等。

session-factory元素中,我们还可以配置一些其他的属性,例如:

  • hibernate.show_sql:是否在控制台中显示SQL语句,建议在开发阶段启用;
  • hibernate.hbm2ddl.auto:是否自动创建数据库表,建议在开发阶段启用,生产环境应该关闭。
步骤三:创建实体类

在使用Hibernate框架访问数据库时,我们需要定义一个Java类来表示数据库中的表,并使用注解来映射数据表和类属性。例如,假设我们有一个名为User的表,该表包含idnameemail三个字段,则可以创建一个名为UserEntity的类,定义如下:

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

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

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

    // getters and setters
}

在上面的代码中,我们使用@Entity@Table注解来指定该类对应的数据表以及表的名称,在类的属性上使用@Column注解来指定对象属性与数据库字段之间的映射关系。

步骤四:创建DAO类

DAO(Data Access Object)是一个用于访问数据库的对象,它封装了数据访问的细节,使得其他部分的代码可以专注于业务逻辑而不必关心底层的数据库操作。因此,我们需要创建一个名为UserDAO的类,用于访问User表:

@Repository
public class UserDAO {
    @Autowired
    private EntityManager entityManager;

    public void save(UserEntity user) {
        entityManager.persist(user);
    }

    public List<UserEntity> getAll() {
        CriteriaBuilder cb = entityManager.getCriteriaBuilder();
        CriteriaQuery<UserEntity> cq = cb.createQuery(UserEntity.class);
        Root<UserEntity> root = cq.from(UserEntity.class);
        cq.select(root);
        TypedQuery<UserEntity> query = entityManager.createQuery(cq);
        return query.getResultList();
    }
}

在上面的代码中,我们使用EntityManager对象来访问数据库,其中的persist方法用于保存实体对象到数据库中,createQuery方法用于查询数据库中的对象。

UserDAO类使用@Repository注解标记,表示该类是一个数据访问对象,并且Spring容器会负责创建和管理它。

步骤五:创建Struts 2 Action

Action是Struts 2应用程序中执行请求处理逻辑的对象。在此处,我们需要创建一个名为UserAction的Action,用于处理用户请求:

@Namespace("/")
@ResultPath("/")
public class UserAction extends ActionSupport {
    private static final long serialVersionUID = 1L;

    private UserDAO userDAO;
    private UserEntity user;
    private List<UserEntity> userList;
    private Long id;

    @Autowired
    public void setUserDAO(UserDAO userDAO) {
        this.userDAO = userDAO;
    }

    public UserEntity getUser() {
        return user;
    }

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

    public List<UserEntity> getUserList() {
        return userList;
    }

    public void setUserList(List<UserEntity> userList) {
        this.userList = userList;
    }

    public Long getId() {
        return id;
    }

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

    public String list() {
        userList = userDAO.getAll();
        return SUCCESS;
    }

    public String add() {
        userDAO.save(user);
        return SUCCESS;
    }
}

在上面的代码中,我们使用@Namespace注解来指定Action的命名空间,在ResultPath注解中指定视图文件所在的目录。

UserAction类使用了@Autowired注解来注入UserDAO对象,并且定义了一些不同的方法来处理不同的用户请求。例如,list方法将查询所有的用户对象,并将结果保存在userList属性中,而add方法则将保存一个新的用户对象到数据库中。

步骤六:配置Struts 2

src/main/resources目录下,创建一个名为struts.xml的文件,并添加以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <constant name="struts.devMode" value="true" />

    <package name="default" namespace="/" extends="struts-default">
        <action name="userList" class="com.example.UserAction" method="list">
            <result name="success">/userList.jsp</result>
        </action>

        <action name="userAdd" class="com.example.UserAction" method="add">
            <result name="success">/userAdd.jsp</result>
        </action>
    </package>
</struts>

在上面的配置文件中,我们定义了一个名为default的包,并在其中定义了两个Action,分别用于处理用户请求。

其中,/userList.jsp/userAdd.jsp是用于展示用户列表和添加用户的页面。我们可以在jsp页面中使用标签库来显示和提交数据,例如:

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

<s:iterator value="userList">
    <tr>
        <td><s:property value="id"/></td>
        <td><s:property value="name"/></td>
        <td><s:property value="email"/></td>
    </tr>
</s:iterator>

<s:form action="userAdd" method="post">
    <s:textfield name="user.name" label="Name" />
    <s:textfield name="user.email" label="Email" />
    <s:submit value="Submit" />
</s:form>

在上面的JSP代码中,我们使用<s:iterator>标签库来迭代显示所有的用户对象,而<s:form>标签库用于提交用户数据到服务器端。

步骤七:启动应用程序

现在,我们已经完成了所有的设置和配置,可以启动应用程序来测试它是否正常工作。我们可以使用一些常见的工具,例如Maven、Tomcat、Jetty等来启动Web应用程序。

在Web浏览器中访问http://localhost:8080/userList,将会看到一个用户列表,该列表包括idnameemail三个字段。我们可以在该页面上点击“添加用户”按钮来添加一个新的用户对象,该用户对象将被保存到数据库中。

结论

通过以上步骤的操作,我们已经在Struts 2应用程序中成功集成了Hibernate框架,并使用它来访问数据库。这种集成方式可以提供更方便、更安全、更高效的数据访问方式,为Web应用程序的开发和维护带来了很多便利。