• (二十六)Struts2 Hibernate集成


    Hibernate是一个高性能的对象/关系留存和查询服务,它是根据开源GNU宽通用公共许可证(LGPL)许可的,可以免费下载。在这一章。 我们将学习如何实现Struts2 与Hibernate的集成。

    数据库设置

    对于本教程,我们将使用“struts2_tutorial”MySQL数据库,使用用户名“root”连接到机器上的这个数据库,不设密码。首先,你需要运行以下脚本。此脚本创建一个名为student的新表,并在此表中创建少量记录:

    CREATE TABLE IF NOT EXISTS `student` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `first_name` varchar(40) NOT NULL,
      `last_name` varchar(40) NOT NULL,
      `marks` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    );
    
    --
    -- Dumping data for table `student`
    --
    
    INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`) 
      VALUES(1, 'George', 'Kane', 20);
    INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`) 
      VALUES(2, 'Melissa', 'Michael', 91);
    INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`) 
      VALUES(3, 'Jessica', 'Drake', 21);
    

      

    Hibernate配置

    接下来让我们创建hibernate.cfg.xml,它是hibernate配置文件。

    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
    <session-factory>
       <property name="hibernate.connection.driver_class">c
          om.mysql.jdbc.Driver
       </property>
       <property name="hibernate.connection.url">
          jdbc:mysql://www.w3cschool.cn/struts_tutorial
       </property>
       <property name="hibernate.connection.username">root</property>
       <property name="hibernate.connection.password"></property>
       <property name="hibernate.connection.pool_size">10</property>
       <property name="show_sql">true</property>
       <property name="dialect">
          org.hibernate.dialect.MySQLDialect
       </property>
       <property name="hibernate.hbm2ddl.auto">update</property>
       <mapping class="cn.w3cschool.hibernate.Student" />
    </session-factory>
    </hibernate-configuration> 
    

      

    让我们过一下hibernate配置文件。首先,我们声明使用MySQL驱动程序。然后我们声明了jdbc url用于连接到数据库。接着我们声明连接的用户名,密码和池大小。我们还指出希望通过将“show_sql”打开为true来查看日志文件中的SQL。

    环境搭建

    这个项目需要很多jar文件,以下的是所需的JAR文件的完整列表的屏幕截图:

    Struts和Hibernate的jar

    大多数JAR文件可以作为struts分发的一部分获取。如果你有安装一个应用程序服务器,如glassfish,websphere或jboss,那么你可以从appserver的lib文件夹中获取大多数剩余的jar文件。如果没有,你可以单独下载文件:

    其余的文件,你应该能够从struts2 中分配。

    Hibernate类

    现在让我们为hibernate集成创建所需的java类。按照Student.java的内容:

    package cn.w3cschool.hibernate;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="student")
    public class Student {
    	
       @Id
       @GeneratedValue
       private int id;
       @Column(name="last_name")
       private String lastName;
       @Column(name="first_name")
       private String firstName;
       private int marks;
       public int getId() {
        return id;
       }
       public void setId(int id) {
        this.id = id;
       }
       public String getLastName() {
          return lastName;
       }
       public void setLastName(String lastName) {
          this.lastName = lastName;
       }
       public String getFirstName() {
          return firstName;
       }
       public void setFirstName(String firstName) {
          this.firstName = firstName;
       }
       public int getMarks() {
          return marks;
       }
       public void setMarks(int marks) {
          this.marks = marks;
       }
    }
    

      

    这是一个POJO类,根据Hibernate规范表示的student表。它具有对应于student表列名的属性id,firstName和lastName。接下来让我们创建StudentDAO.java文件,如下所示:

    package cn.w3cschool.hibernate;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    
    import com.googlecode.s2hibernate.struts2.plugin.
                         annotations.SessionTarget;
    import com.googlecode.s2hibernate.struts2.plugin.
                         annotations.TransactionTarget;
    
    public class StudentDAO {
    	
       @SessionTarget
       Session session;
    
       @TransactionTarget
       Transaction transaction;
    
       @SuppressWarnings("unchecked")
       public List<Student> getStudents()
       {
          List<Student> students = new ArrayList<Student>();
          try
          {
             students = session.createQuery("from Student").list();
          }
          catch(Exception e)
          {
             e.printStackTrace();
          }
          return students;
       }
    
       public void addStudent(Student student)
       {
          session.save(student);
       }
    }
    

      

    StudentDAO类是Student类的数据访问层。它有方法来列出所有学生,然后保存一个新的学生记录。

    Action类

    下面的文件AddStudentAction.java定义了我们的action类。我们在这里有两个action方法:execute()和listStudents()。execute()方法用于添加新的学生记录。我们使用dao的save()方法来实现这一点。另一种listStudents()方法用于列出学生。我们使用dao的列表方法来获取所有学生的列表。

    package cn.w3cschool.struts2;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    import cn.w3cschool.hibernate.Student;
    import cn.w3cschool.hibernate.StudentDAO;
    
    public class AddStudentAction extends ActionSupport 
                implements ModelDriven<Student>{
    
       Student student  = new Student();
       List<Student> students = new ArrayList<Student>();
       StudentDAO dao = new StudentDAO();
       @Override
       public Student getModel() {
          return student;
       }
    
       public String execute()
       {
          dao.addStudent(student);
          return "success";
       }
    
       public String listStudents()
       {
          students = dao.getStudents();
          return "success";
       }
    
       public Student getStudent() {
          return student;
       }
    
       public void setStudent(Student student) {
          this.student = student;
       }
    
       public List<Student> getStudents() {
          return students;
       }
    
       public void setStudents(List<Student> students) {
          this.students = students;
       }
    	
    }
    

      

    你会注意到我们正在实现ModelDriven接口。这是在你的action类处理一个具体的模型类(如Student)而不是个别的属性(如firstName,lastName)时使用。ModelAware接口需要你实现一个方法来返回模型。在我们的例子中,我们返回“student”对象。

    创建视图文件

    现在创建包含以下内容的student.jsp视图文件:

    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <html>
    <head>
    <title>Hello World</title>
    <s:head />
    </head>
    <body>
       <s:form action="addStudent">
       <s:textfield name="firstName" label="First Name"/>
       <s:textfield name="lastName" label="Last Name"/>
       <s:textfield name="marks" label="Marks"/>
       <s:submit/>
       <hr/>
       <table>
          <tr>
             <td>First Name</td>
             <td>Last Name</td>
             <td>Marks</td>
          </tr>
          <s:iterator value="students">	
             <tr>
                <td><s:property value="firstName"/></td>
                <td><s:property value="lastName"/></td>
                <td><s:property value="marks"/></td>
               </tr>
          </s:iterator>	
       </table>
       </s:form>
    </body>
    </html>
    

      

    student.jsp非常简单。在上面部分,我们有一个提交到“addStudent.action”的表单。它接受firstName,lastName和marks。因为addStudent action绑定到ModelAware的“AddSudentAction”,所以将自动创建一个学生bean,其值自动填充为firstName,lastName和marks。
    在下面部分,我们浏览学生列表(参见AddStudentAction.java),并在表中显示firstname,lastname和marks的值。

    Struts配置

    让我们使用struts.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
       "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
       "http://struts.apache.org/dtds/struts-2.0.dtd">
    
    <struts>
       <constant name="struts.devMode" value="true" />
    
       <package name="myhibernate" extends="hibernate-default">
    
          <action name="addStudent" method="execute"
             class="cn.w3cschool.struts2.AddStudentAction">
             <result name="success" type="redirect">
                   listStudents
             </result>
          </action>
    
          <action name="listStudents" method="listStudents"
             class="cn.w3cschool.struts2.AddStudentAction">
             <result name="success">/students.jsp</result>
          </action>
    
    </package>
    
    </struts>
    

      

    要注意的要点是,我们的包“myhibernate”扩展了名为“hibernate-default”的struts2默认包。然后我们声明两个action:addStudent和listStudents。addStudent调用AddStudentAction类的execute(),然后在成功时调用listStudents方法。listStudent方法调用AddStudentAction类上的listStudents(),并使用student.jsp作为视图。

    现在,右键单击项目名称,然后单击“Export”> “WAR File”以创建WAR文件。然后在Tomcat的webapps目录中部署WAR文件。最后,启动Tomcat服务器并尝试访问URL http://localhost:8080/HelloWorldStruts2/student.jsp,将显示以下界面:

    Struts和Hibernate的集成

    在上面部分,我们得到一个表单,输入新学生记录的值,下面部分列出数据库中的学生。继续添加一个新的学生记录,然后按提交。屏幕将刷新,并在每次单击提交时向你显示更新了的列表。

  • 相关阅读:
    想写点啥?
    网站优化记录
    freemarker了解
    spring理解
    mybatis了解
    struts机制
    SSM整合时初始化出现异常
    常用的正则表达式
    MySQL数据库安装配置步骤详解
    完全卸载MySQL数据库,实现重装
  • 原文地址:https://www.cnblogs.com/w894819398/p/7298352.html
Copyright © 2020-2023  润新知