1. 程式人生 > >Eclipse+Maven搭建Struts2+Spring+Hibernate專案

Eclipse+Maven搭建Struts2+Spring+Hibernate專案

建立該專案使用的資料庫及其資料表:

CREATE TABLE `t_user` (
  `userId` int(11) NOT NULL DEFAULT '0',
  `userName` varchar(25) COLLATE utf8_bin DEFAULT NULL,
  `userPassword` varchar(25) COLLATE utf8_bin DEFAULT NULL,
  `userEmail` varchar(30) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`userId`)
) ENGINE=InnoDB DEFAULT
CHARSET=utf8 COLLATE=utf8_bin;

接一下來開始搭建專案
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

在該工程下,只需要修改“pom.xml”檔案,在該檔案中新增所需要的資源座標即可:
例如如下所示,自己也可以新增自己專案中所需要的資源。

<!-- 集中定義依賴的版本號 -->
<properties>
    <junit.version>4.12</junit.version>
    <struts.version>2.3.14</struts.version>
    <hibernate.version
>
4.3.8.Final</hibernate.version> <mysql.version>5.1.25</mysql.version> <druid.version>1.0.9</druid.version> <spring.version>4.1.6.RELEASE</spring.version> <slf4j.version>1.6.6</slf4j.version> <log4j.version>1.2.12</log4j.version
>
<jackson.version>2.4.2</jackson.version> <jdeis.version>2.7.2</jdeis.version> <commons-lang3.version>3.3.2</commons-lang3.version> <commons-io.version>1.3.2</commons-io.version> <commons-net.version>3.3</commons-net.version> <jstl.version>1.2</jstl.version> <servlet-api.version>2.5</servlet-api.version> <jsp-api.version>2.0</jsp-api.version> </properties> <!-- 只定義依賴版本,不實際依賴 --> <dependencyManagement> <dependencies> <!-- Apache工具元件 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons-lang3.version}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>${commons-io.version}</version> </dependency> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>${commons-net.version}</version> </dependency> <!-- Jackson Json處理工具包 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <!-- 單元測試 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <!-- 日誌檔案管理包 --> <!-- log start --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- log end --> <!-- 連線池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- MySql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <!--struts2依賴 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>${struts.version}</version> <exclusions> <exclusion> <groupId>javassist</groupId> <artifactId>javassist</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>${struts.version}</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-convention-plugin</artifactId> <version>${struts.version}</version> </dependency> <!-- hibernate --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.version}</version> </dependency> <!-- jsp相關 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>${servlet-api.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>${jsp-api.version}</version> <scope>provided</scope> </dependency> </dependencies> </dependencyManagement> <build> <finalName>${project.artifactId}</finalName> <plugins> <!-- 資原始檔拷貝外掛 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.7</version> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- java編譯外掛 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> <pluginManagement> <plugins> <!-- 配置Tomcat外掛 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> </plugin> </plugins> </pluginManagement> </build>

接下來:(參照上步)new->other->搜尋maven->maven project->勾選“Create a simple project(skip archetype selection)”->next

這裡寫圖片描述

該專案中,我們也只是修改“pom.xml”檔案,該檔案下,只需要定義公共的資源即可(也就是其餘工程都能用到的資源),檔案修改如下:

<!-- jar包的依賴 -->
    <dependencies>
        <!-- Apache工具元件 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-io</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
        </dependency>
        <!-- Jackson Json處理工具包 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
        <!-- 單元測試 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 日誌處理 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </dependency>
    </dependencies>

接下來(參照上步):new->other->搜尋maven->maven project->勾選“Create a simple project(skip archetype selection)”->next

這裡寫圖片描述

修改其“pom.xml”檔案,此處添加了 tomcat7外掛,以及新增依賴“mssh-common”中的資源

<!-- 依賴管理 -->
<dependencies>
    <dependency>
        <groupId>com.zh</groupId>
        <artifactId>mssh-common</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>
<build>
    <!-- 配置外掛 -->
    <plugins>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <configuration>
                <port>8080</port>
                <path>/</path>
            </configuration>
        </plugin>
    </plugins>
</build>

接下來建立SSH框架各層(web層、service層、dao層以及pojo類的定義)
① 定義pojo
右鍵點選“mssh-manager”->other->“搜尋maven”->選擇“Maven Module” ->next

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

在該工程下建立User.java

這裡寫圖片描述

package com.zh.pojo;
public class User {
    private Integer userId;  
    private String userName;  
    private String userPassword;  
    private String userEmail;
    get/set省略......
}

② 定義dao層
步驟同①,名稱為“mssh-mananer-dao”
修改“pom.xml”檔案,新增“mssh-manager-pojo”依賴,並新增“Hibernate”和“MySql”依賴。配置如下:

<dependencies>
    <dependency>
        <groupId>com.zh</groupId>
        <artifactId>mssh-manager-pojo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <!--hibernate依賴 -->
    <dependency>
           <groupId>org.hibernate</groupId>
           <artifactId>hibernate-core</artifactId>
       </dependency>
       <dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-orm</artifactId>  
    </dependency>
    <!-- 連線池 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
    </dependency>
    <!-- MySql -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>

在該工程下,建立dao介面

這裡寫圖片描述

介面定義如下:

package com.zh.dao;
import java.util.List;
import org.springframework.orm.hibernate4.support.HibernateDaoSupport;
import com.zh.pojo.User;
public class UserDao extends HibernateDaoSupport {
    @SuppressWarnings("unchecked")
    public User findAllUser() {
        String hql = "from User where userId = 1";
        List<User> list = (List<User>) this.getHibernateTemplate().find(hql);
        if (list != null && list.size() > 0) {
            return list.get(0);
        }
        return null;
    }
}

接下來定義對映檔案User.hbm.xml

這裡寫圖片描述

User.hbm.xml定義如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.zh.pojo.User" table="t_user" catalog="ssh">
        <id name="userId">
            <column name="userId" />
            <generator class="native" />
        </id>
        <property name="userName"><column name="userName"/></property>
        <property name="userPassword"><column name="userPassword"/></property>
        <property name="userEmail"><column name="userEmail"/></property>
    </class>
</hibernate-mapping>

③ 定義service層
步驟同①和②,名稱為“mssh-mananer-service”
修改“pom.xml”檔案,新增“mssh-manager-dao”依賴以及“Spring”依賴。配置如下:

<!-- 依賴管理 -->
<dependencies>
    <dependency>
        <groupId>com.zh</groupId>
        <artifactId>mssh-manager-dao</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <!-- spring -->
    <dependency>  
           <groupId>org.springframework</groupId>  
           <artifactId>spring-core</artifactId>  
       </dependency>  
       <dependency>  
           <groupId>org.springframework</groupId>  
           <artifactId>spring-beans</artifactId>  
       </dependency>  
       <dependency>  
           <groupId>org.springframework</groupId>  
           <artifactId>spring-context</artifactId>  
       </dependency>  
       <dependency>  
           <groupId>org.springframework</groupId>  
           <artifactId>spring-tx</artifactId>  
       </dependency>  
       <dependency>  
           <groupId>org.springframework</groupId>  
           <artifactId>spring-web</artifactId>  
       </dependency>  
       <dependency>  
           <groupId>org.springframework</groupId>  
           <artifactId>spring-orm</artifactId>  
       </dependency>  
</dependencies>

在該工程建立service介面以及其實現類,如下所示:

這裡寫圖片描述

介面以及實現類定義如下:
UserService.java

public interface UserService {
    User findAllUser();
}

UserServiceImpl.java

package com.zh.service;
import javax.transaction.Transactional;
import com.zh.dao.UserDao;
import com.zh.pojo.User;
@Transactional
public class UserServiceImpl implements UserService {
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    @Override
    public User findAllUser() {
        return userDao.findAllUser();
    }
}

④ 定義web層
步驟同①和②和③,名稱為“mssh-manager-web”
注意:Packaging選擇war

這裡寫圖片描述

修改“pom.xml”檔案,新增“mssh-manager-service”依賴,以及jsp等的依賴。配置如下:

<!-- 依賴管理 -->
<dependencies>
    <dependency>
        <groupId>com.zh</groupId>
        <artifactId>mssh-manager-service</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <!-- jsp相關 -->
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jsp-api</artifactId>
        <scope>provided</scope>
    </dependency>
    <!--struts2依賴 -->
    <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>javassist</groupId>
                    <artifactId>javassist</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-convention-plugin</artifactId>
        </dependency>
         <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.6.8</version>
    </dependency>
</dependencies>

建立action

這裡寫圖片描述

UserAction.java配置如下:

package com.zh.action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.zh.pojo.User;
import com.zh.service.UserServiceImpl;
public class UserAction extends ActionSupport implements ModelDriven<User>{
    private static final long serialVersionUID = 1L;
    private UserServiceImpl userService;
    public void setUserService(UserServiceImpl userService) {
        this.userService = userService;
    }
    private User user = new User();
    @Override
    public User getModel() {
        return user;
    }
    public String findById() {
        User user = userService.findAllUser();
        ActionContext.getContext().getSession().put("user", user);
        return "success";
    }
}

建立hibernate、spring、struts2、log4j等的配置檔案。如下所示:

這裡寫圖片描述

jdbc.properties檔案配置如下:

jdbc_driverClassName=com.mysql.jdbc.Driver  
jdbc_url=jdbc:mysql://localhost:3306/自己的資料庫名稱
jdbc_username=資料庫使用者
jdbc_password=資料庫密碼

applicationContext-dao.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.sp