笔记一:搭建一个简单的Spring+hibernate+struts2项目

最近在学习用struts+spring+hibernate来做开发,把学习过程记录一下,以便以后回顾:

整个项目搭建完成的结构如图:

 

下面是搭建过程:

第一步、新建一个employeeMgmt的web项目

第二步、导入spring相关jar包、hibernate相关jar包、struts相关jar包,还有整合log4j的jar包、以及数据库所用的jar包,jar包结构如图:

第三步、

(1).在src根目录下新建applicationContext.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd" >
        
   
</beans>

(2).在src根目录下新建struts.xml文件

1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE struts PUBLIC
3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
4     "http://struts.apache.org/dtds/struts-2.3.dtd">

 

 (3).在src根目录下新建jdbc.properties属性文件,我用的是Oracle数据库,等号左边的名字可以自定义,没有固定格式。

jdbc.driverClass=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:IP:端口号:数据库全局名
jdbc.username=用户名
jdbc.password=密码

(4).在src根目录下新建log4j.properties日志文件

### set log levels ### 
log4j.rootLogger = info , Console , D
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=INFO
log4j.logger.java.sql.Statement=INFO
log4j.logger.java.sql.PreparedStatement=INFO
#output2file
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender 
log4j.appender.D.File = D\:/logs/log.log 
log4j.appender.D.Append = true 
log4j.appender.D.Threshold = INFO \#\# \u00E8\u00BE\u0093\u00E5\u0087\u00BAinfo\u00E7\u00BA\u00A7\u00E5\u0088\u00AB\u00E4\u00BB\u00A5\u00E4\u00B8\u008A\u00E7\u009A\u0084\u00E6\u0097\u00A5\u00E5\u00BF\u0097 
log4j.appender.D.layout = org.apache.log4j.PatternLayout 
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} [ %t\:%r ] - [ %p ] %m%n 
 

第四步、配置web.xml中的spring的监听和struts的拦截器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <filter>
    <filter-name>struts</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <display-name></display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

第五步、在domain包下新建两个实体类和两个映射文件

(1)部门实体类

package com.moocer.employee.domian;

import java.util.HashSet;
import java.util.Set;

//部门的实体
public class Department {
    private Integer did;
    private String dname;
    private String ddesc;
    //部门的员工集合
    private Set<Employee> employees = new HashSet<Employee>();
    
    public Integer getDid() {
        return did;
    }
    public void setDid(Integer did) {
        this.did = did;
    }
    public String getDname() {
        return dname;
    }
    public void setDname(String dname) {
        this.dname = dname;
    }
    public String getDdesc() {
        return ddesc;
    }
    public void setDdesc(String ddesc) {
        this.ddesc = ddesc;
    }
    public Set<Employee> getEmployees() {
        return employees;
    }
    public void setEmployees(Set<Employee> employees) {
        this.employees = employees;
    }
    
    
}

(2)员工实体类

package com.moocer.employee.domian;

import java.util.Date;

//员工的实体
public class Employee {
    private Integer eid;
    private String ename;
    private String sex;
    private Date birthday;
    private Date joinDate;
    private String eno;
    private String username;
    private String password;
    
    //员工所属部门
    private Department department;

    public Integer getEid() {
        return eid;
    }

    public void setEid(Integer eid) {
        this.eid = eid;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public Date getJoinDate() {
        return joinDate;
    }

    public void setJoinDate(Date joinDate) {
        this.joinDate = joinDate;
    }

    public String getEno() {
        return eno;
    }

    public void setEno(String eno) {
        this.eno = eno;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Department getDepartment() {
        return department;
    }

    public void setDepartment(Department department) {
        this.department = department;
    }
 }

(3)部门映射文件Department.hbm.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping>
 6     <class name="com.moocer.employee.domian.Department" table="t_department">
 7         <id name="did" column="did">
 8             <generator class="native"/>
 9         </id>
10         <property name="dname" column="dname" length="20"/>
11         <property name="ddesc" column="ddesc" length="100"/>
12         <!-- 关联关系映射 一对多 -->
13         <set name="employees">
14             <key column="dno"/>
15             <one-to-many class="com.moocer.employee.domian.Employee"/>
16         </set>
17     </class>
18 </hibernate-mapping>

(4)员工映射文件Employee.hbm.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping>
 6     <class name="com.moocer.employee.domian.Employee" table="t_employee">
 7         <id name="eid" column="eid">
 8             <generator class="native"/>
 9         </id>
10         <property name="ename" column="ename" length="20"/>
11         <property name="sex" column="sex" length="10"/>
12         <property name="birthday" column="birthday"/>
13         <property name="joinDate" column="joinDate"/>
14         <property name="eno" column="eno" length="20"/>
15         <property name="username" column="usrename" length="20"/>
16         <property name="password" column="password" length="20"/>
17         
18         <!-- 关联关系映射 多对一 -->
19         <many-to-one name="department" class="com.moocer.employee.domian.Department" column="dno"/>
20     </class>
21 </hibernate-mapping>

引入

<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

头部,这个段代码可以在hibernate3.jar的核心文件中的最后找到找到,如下图:
 

 

第六步、配置配置文件

(1)配置applicationContext.xml文件

在原有基础上加下如下代码:

 1 <!-- 引入外部属性文件 -->
 2     <context:property-placeholder location="classpath:jdbc.properties"/>
 3     
 4     <!-- 配置连接池 c3po-->
 5     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
 6         <property name="driverClass" value="${jdbc.driverClass}"/>
 7         <property name="jdbcUrl" value="${jdbc.url}"/>
 8         <property name="user" value="${jdbc.username}"/>
 9         <property name="password" value="${jdbc.password}"/>
10     </bean>
11     
12     <!-- 配置hibernate的相关属性 -->
13     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
14         <!-- 连接池的注入 -->
15         <property name="dataSource" ref="dataSource"/>
16         <!-- 配置hibernate的属性 -->
17         <property name="hibernateProperties">
18             <props>
19                 <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
20                 <prop key="hibernate.show_sql">true</prop>
21                 <prop key="hibernate.format_sql">true</prop>
22                 <prop key="hibernate.hbm2ddl.auto">update</prop>
23             </props>
24         </property>
25         <!-- 配置hibernate的映射文件 -->
26         <property name="mappingResources">
27             <list>
28                 <value>com/moocer/employee/domian/Department.hbm.xml</value>
29                 <value>com/moocer/employee/domian/Employee.hbm.xml</value>
30             </list>
31         </property>
32     </bean>
33     
34     <!-- action交由spring管理,
35      配置action 因为spring默认是单例的,所以要加上scope=“protoype”-->
36     
37     <!-- 配置业务层的类 -->
38     
39     <!-- 配置DAO的类 -->
40     
41     <!-- 配置事务管理 -->
42     <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
43         <property name="sessionFactory" ref="sessionFactory"/>
44     </bean>
45     
46     <!-- 开启注解事物 -->
47     <tx:annotation-driven transaction-manager="transactionManager"/>

(2)struts.xml中加入如下代码

1 <struts>
2     <package name="moocer" extends="struts-default" namespace="/">
3         
4     </package>
5 </struts>

第七步、把工程发布到Tomcat上部署,我的是7,启动Tomcat

此时查看数据库会发现

 

t_department部门表和t_employee表已经建好,搭建结束。

 

posted @ 2017-11-13 10:30  啊啊喔喔smile~  阅读(1027)  评论(0编辑  收藏  举报