SpringMVC+Hibernate+Struts2开发环境

一.搭建开发环境

  • Eclipse

  • Tomcat 8.0

  • JDK 1.8

  • Spring 4.1.3

  • Hibernate 4.3.5

  • MySql 5.7.17

  • Maven 3.0.5

1.创建maven项目

maven记得配置阿里镜像,可以解决国内使用maven下载过慢的问题。配置方法为maven安装目录下 conf/setting.xml配置文件中,结点修改为 :

  <mirrors>
    <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>*</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror> 
  </mirrors>

创建maven项目时选择webapp模板,如图

webapp模板
webapp模板
创建好maven项目后,修改pom.xml,设置项目依赖:

http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>blog</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>blog Maven Webapp</name>
Welcome to Apache Maven

<profiles>
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.1.3.RELEASE</spring.version>
<hibernate.version>4.3.5.Final</hibernate.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>

<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</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-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</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-test</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-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.2</version>
</dependency>
<!-- spring end -->
<!-- Hibernate start -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- Hibernate end -->
<!-- JDBC MySQL Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>

<!-- Collections -->
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>

<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.2.1</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.0.2</version>
</dependency>
<!--<dependency>-->
<!--<groupId>com.intellifylearning</groupId>-->
<!--<artifactId>intellisense</artifactId>-->
<!--<version>1.0.3</version>-->
<!--</dependency>-->
<!--引入jackson相关的包-->

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.5</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.5</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.5</version>
</dependency>
</dependencies>

<build>
<finalName>blog</finalName>
</build>
</project>

设置完成后,项目如图:
项目初始化
2.数据库建立

首先在Navicat中创建数据库blog,然后使用sql创建两张表user和blog,sql如下:

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

DROP TABLE IF EXISTS `user_info`;
create table user(
uid  INT  PRIMARY KEY AUTO_INCREMENT COMMENT 'id',
username VARCHAR(20) NOT NULL COMMENT '用户名',
password VARCHAR(20) NOT NULL COMMENT '密码'
)ENGINE=INNODB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `blog_info`;
create table blog(
bid  INT  PRIMARY KEY AUTO_INCREMENT COMMENT 'blogid',
title VARCHAR(50) NOT NULL COMMENT '标题',
content text NOT NULL COMMENT '内容',
userid INT NOT NULL COMMENT '关联的用户id',
FOREIGN KEY (userid) references user(uid) on delete cascade on update cascade  )ENGINE=INNODB DEFAULT CHARSET=utf8

mysql相关的一些东西:
1、user表和blog表是一对多的关系,使用级联可以方便的进行关联操作;
2.数据表的engine的选择:InnoDB提供事务支持以及外部键等高级数据库功能。因此建议选用之。
3.配置tomcat服务器和前端页面

4.web.xml和数据库配置
web.xml配置监听器、自定义的dispatcher-servlet.xml.和spring提供的编码过滤器。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <error-page>
        <error-code>404</error-code>
        <location>/errorPage.jsp</location>
    </error-page>
    <!--配置监听器-->
    <!--捕捉服务器的停止和启动,在启动和停止的触发方法中做相应的操作-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- 整个应用范围(web项目)的上下文初始化参数 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
 <!--配置servlet-->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <!--其中<param-value>**.xml</param-value> 这里可以使用多种写法-->
            <!--1、不写,使用默认值:/WEB-INF/<servlet-name>-servlet.xml-->
            <!--2、<param-value>/WEB-INF/classes/dispatcher-servlet.xml</param-value>-->
            <!--3、<param-value>classpath*:dispatcher-servlet.xml</param-value>-->
            <!--4、多个值用逗号分隔-->
            <param-value>classpath:dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- 编码过滤器-->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

配置对应的数据库文件和spring配置文件,完成好项目结构如图:
初步配置项目结构
在DataSource中添加对应的blog数据库,如果加载mysql-connector.jar出现unable to load Jar/Zip问题,删除原有的jar文件重新加载即可。

stackoverflow解决方法:
I had similar issue.Clicking "Clear all" and then adding the jar manually solved the problem.
接下来逆向生成hibenrtae配置文件和pojo类,需要使用hibenrtae-configuration插件,可以在插件市场下载安装。

Eclipse使用Hiberntae-tool插件的教程可以参考Hibenate反向工程

生成后需要同时生成hibernate的.hbm.xml配置文件,然后配置applicationContext.xml文件,添加对应的.hbm.xml路径。
运行i下熬过



<context:component-scan base-package="com.blog"/>

<!-- 导入外部的properties文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--c3p0数据源 -->
<bean name="DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <!-- 数据连接信息 -->
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="driverClass" value="${jdbc.driver}"/>
    <property name="user" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
    <!-- 其他配置 -->
    <!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
    <property name="initialPoolSize" value="${initialPoolSize}"/>
    <!--连接池中保留的最小连接数。Default: 3 -->
    <property name="minPoolSize" value="${minPoolSize}"/>
    <!--连接池中保留的最大连接数。Default: 15 -->
    <property name="maxPoolSize" value="${maxPoolSize}"/>
    <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
    <property name="acquireIncrement" value="${acquireIncrement}"/>
    <!-- 控制数据源内加载的PreparedStatements数量。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->
    <property name="maxStatements" value="${maxStatements}"/>
    <!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->
    <property name="maxStatementsPerConnection" value="${maxStatementsPerConnection}"/>
    <!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
    <property name="maxIdleTime" value="${maxIdleTime}"/>
</bean>

<!-- 配置SessionFactory -->
<!-- 配置c3p0连接池和hibernate的配置信息,自动扫描model包下以注解方式配置的hibernate类文件 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <!-- 配置c3p0数据库连接池 -->
    <property name="dataSource" ref="DataSource"/>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.show_sql">
                ${hibernate.show_sql}
            </prop>
            <prop key="hibernate.use_sql_comments">
                ${hibernate.use_sql_comments}
            </prop>
            <!--<prop key="hibernate.hbm2ddl.auto">create</prop>-->
            <prop key="hibernate.dialect">
                ${hibernate.dialect}
            </prop>
            <prop key="hibernate.jdbc.fetch_size">
                ${hibernate.jdbc.fetch_size}
            </prop>
            <prop key="hibernate.jdbc.batch_size">
                ${hibernate.jdbc.batch_size}
            </prop>
            <prop key="hibernate.use_outer_join">
                ${hibernate.use_outer_join}
            </prop>
            <prop key="cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
            <prop key="hibernate.query.factory_class">${hibernate.query.factory_class}</prop>
            <prop key="hibernate.connection.url">jdbc:mysql://localhost:3306/blog</prop>
            <prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
        </props>
    </property>
    <!-- 查找对应的的hibernate配置文件 -->
    
    
    <property name="mappingResources">
    	<list>
    		  <value> com/blog/model/Blog.hbm.xml</value>
    		  <value> com/blog/model/User.hbm.xml</value>
    	</list>
    </property>
</bean>

<!-- 事物管理 -->
<!--<tx:annotation-driven transaction-manager="txManager"/>-->
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- 配置事务事务属性 --><!--<tx:annotation-driven transaction-manager="txManager"/>-->
<tx:advice id="txAdvice" transaction-manager="txManager">
    <tx:attributes>
        <tx:method name="save*" read-only="false" propagation="REQUIRED"/>
        <tx:method name="find*" read-only="true" propagation="REQUIRED"/>
        <tx:method name="delete*" propagation="REQUIRED"/>
        <tx:method name="*"/>
    </tx:attributes>
</tx:advice>

<!--切面配置 -->
<!--<context:annotation-config/>-->
<aop:config>
    <aop:pointcut id="txServices" expression="execution(* com.blog.dao.*.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="txServices"/>
</aop:config>

posted on 2018-11-21 10:38  ShoolyShooly  阅读(354)  评论(0编辑  收藏  举报

导航