欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,因此会详细以及着重地阐述SSH三个框架的基础知识,第四部分将会进入项目实战,若是您已经对SSH框架有所掌握,那么能够直接浏览第四章,源码均提供在GitHub/ssh-network-hard-disk上供你们参阅html
既然本章将的是整合Struts2,Spring,Hibernate三大框架,为什么还要说起Struts2和Hibernate的整合呢?我但愿小伙伴们能在Struts2和Hibernate的整合中明白若是缺乏Spring框架装配各层须要的Bean是多么遗憾的一件事啊!若是没有Spring咱们在整合Struts2和Hibernate将会面临如下问题java
下图所示是使用Struts2和Hibernate整合编写的一个WEB网页,各位运行本节示例源码访问http://localhost:8080/index.jsp 本章三种整合完整工程都可经过github下载
mysql
在Struts2和Hibernate的整合中,为了不"频繁建立和管理各层实现类,使程序耦合严重" ,在示例源码中使用工厂模式来管理实现类;为了不"频繁编写管理数据库连接及事务等模板代码"问题,在示例源码中使用了 HibernateSessionFactory工具类来统一管理Hibernate的Session的管理,可是这些解决方法,仅仅能避免咱们少写一些代码,当随着程序的增大,咱们仍然要面临解耦和重复编码问题git
咱们在Struts2和Hibernate整合中能够看到,咱们须要使用Spring来替咱们解决程序的解耦和重复编码问题,那么Spring是如何来解决问题的呢?(依赖注入)github
第一步:导入依赖(这里有坑,注意Spring的版本不要过高)spring
<dependencies> <!--Spirng--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.16.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.3.16.RELEASE</version> </dependency> <!--Spring-orm--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>4.3.16.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.3.16.RELEASE</version> </dependency> <!--Hibernate--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.3.7.Final</version> </dependency> <!--Struts2--> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.5.16</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-convention-plugin</artifactId> <version>2.5.18</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.5.17</version> </dependency> <!--数据库相关--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.12</version> </dependency> <!--Servlet相关--> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> </dependencies>
第二步:肯定配置文件sql
Struts2-Spring整合方式1 :即Struts2的Action由Struts2自己进行管理,Spring不参与操做,当依赖包存在Struts2-spring插件时,该插件会自动将Service服务注入到Action 本章三种整合完整工程都可经过github下载
数据库
public class UserAction extends ActionSupport implements ModelDriven<User> { private UserService userService; public void setUserService(UserService userService) { this.userService = userService; } @Action(value = "getUser", results = { @Result(name = "success", location = "/index.jsp") }) public String get() throws Exception { User user = userService.get(this.user.getId()); ValueStack valueStack = ActionContext.getContext().getValueStack(); valueStack.set("user", user); return SUCCESS; } ...... }
Struts2-Spring整合方式2 :即Struts2的Action再也不由Struts2自己管理,而交由Spring进行管理 本章三种整合完整工程都可经过github下载
apache
<!--Spring配置WEB层--> <bean name="userAction" class="com.jimisun.action.UserAction" scope="prototype"> <property name="userService" ref="userService"/> </bean>
<!--在Struts2仅仅配置映射关系--> <package name="ssh" extends="struts-default" namespace="/"> <global-results> <result name="success">/index.jsp</result> </global-results> <action name="addUser" class="userAction" method="add"> </action> <action name="getUser" class="userAction" method="get"> </action> </package>
Spring-Hibernate整合 :当Hiberante和Spring一同使用的时候,咱们再也不须要hibernate.cfg.xml文件,那么怎么配置hibernate呢?咱们可使用Spring配置嘛编程
<!--配置Hibernate--> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <!-- 先加载链接池 --> <property name="dataSource" ref="dataSource"/> <!-- 加载方言,加载可选 --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> <!-- 引入映射的配置文件 --> <property name="mappingResources"> <list> <value>com/jimisun/domain/User.hbm.xml</value> </list> </property> </bean>
整合结果
本章经过Struts2和Hibernate的整合明白了咱们要重复进行编码和解耦,而经过使用Spring的依赖注入让咱们再也不频繁管理Bean,经过Spring的面向切面编程咱们再也不编写相似获取事务提交事务等操做..... 固然本章不是Spring的教程,具体请移步另外一系列教程Java开发上帝之眼教程,本章仍然着重关注SSH的整合,本章提供的整合工程都可经过Github下载