二、Maven实战
3.通过maven整合ssh框架
<!-- 属性 -->
<!-- struts的版本 ==> spring的版本4.3.13 ==> hibernate的版本 -->
<properties>
<!-- 统一源码的编码方式 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 统一各个框架版本 -->
<struts.version>2.5.10</struts.version>
<spring.version>4.3.10.RELEASE</spring.version>
<hebernate.version>5.1.7.Final</hebernate.version>
</properties>
<build>
<plugins>
<!-- 统一源代码编译输出的JDK版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<!-- 设置详细信息 -->
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
<!-- 版本锁定:指定项目中依赖的版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Struts2和Spring整合依赖 包含struts2和spring基础包 -->
<!-- 包含Spring 核心依赖 Spring web依赖 Struts2 核心依赖 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>${struts.version}</version>
</dependency>
<!-- spring基础jar包 4.2之后的新版本支持hibernate5 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring web依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring整合ORM框架依赖 Spring集成Hibernate所需包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- SpringAop所依赖的包 -->
<!-- <dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.10</version>
</dependency> -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Hibernate核心包 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hebernate.version}</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>${hebernate.version}</version>
</dependency>
<!-- oracle驱动 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
3.1 搭建struts2环境
- 创建struts2配置文件:struts.xml
- 在web.xml中配置struts2的核心过滤器
<!-- 配置struts核心过滤器 -->
<filter>
<filter-name>struts</filter-name>
<!-- 高版本路径 -->
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
<!-- 低版本路径 -->
<!-- <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>
3.2 搭建spring环境
- 创建spring配置文件:applicationContext.xml
- 在web.xml中配置监听器:ContextLoaderListener
<!-- 配置spring监听器 :默认加载WEB-INF/applicationContext.xml -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 通过上下文参数指定spring配置文件路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
3.3 搭建Hibernate环境
- 创建Hibernate核心配置文件
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!-- 配置在控制台显示SQL语句 -->
<property name="show_sql">true</property>
<!-- 配置对输出的SQL语句进行格式化 -->
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">none</property>
<property name="myeclipse.connection.profile">ehrp</property>
<property name="connection.url">jdbc:oracle:thin:@192.168.0.134:1521/ehrp</property>
<property name="connection.username">user_developer</property>
<property name="connection.password">user_developer</property>
<property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
</session-factory>
</hibernate-configuration>
3.4 struts2跟spring整合
整合要点:action对象创建,交给spring创建
- 创建action类
- 将action对象配置到spring文件中
<!-- 配置action 必须配置scope为多实例 -->
<bean id="customerAction" class="com.zhougl.web.action.CustomerAction" scope="prototype">
</bean>
- 在struts.xml中的action节点中class属性配置为spring工厂中action对象bean的id
<package name="demo" namespace="/" extends="struts-default">
<!-- class为spring中action对象bean的id -->
<action name="customerAction_*" class="customerAction" method="{1}">
<result name="success">/index.jsp</result>
</action>
</package>
3.5 spring跟hibernate整合
整合要点:
-
- 数据源DataSource交给spring
<!-- 加载属性值 classpath只有spring配置才有--> <context:property-placeholder location="classpath:db.properties"/> <!-- 配置DataSource --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driverClass}"></property> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> <property name="user" value="${jdbc.user}"></property><!-- 通过ognl表达式来取值是,${user}在linux下取的是用户名 ${userName}在window下取的是计算机名,都会报错--> <property name="password" value="${jdbc.password}"></property> </bean>
-
- SessionFactory对象交给spring创建
<!-- 配置sessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="configLocations" value="classpath:hibernate.cfg.xml"></property> </bean>
去掉hibernate.cfg.xml中数据库配置信息
-
- 事务管理
-
a) 配置事务框架:PlatformTransactionManager接口
i. jdbc:DataSourceTransactionManager
ii. Hibernate:HibernateTransactionManager
<!-- xml方式管理事务 start--> <!-- 配置通知:具体增强逻辑 --> <tx:advice id="txAdvice"> <tx:attributes> <!-- 匹配业务类中方法名称 --> <tx:method name="save*"/> <tx:method name="delete*"/> <tx:method name="update*"/> <tx:method name="find*" read-only="true"/> <tx:method name="*"/> </tx:attributes> </tx:advice> <!-- 配置aop --> <aop:config> <!-- 配置切点:具体哪些方法要增强(真正被增强的方法) --> <aop:pointcut expression="execution(* com.zhougl.service.*.*(..))" id="cut"/> <!-- 配置切面:将增强逻辑作用到切点(通知+切点) --> <aop:advisor advice-ref="txAdvice" pointcut-ref="cut"/> </aop:config> <!-- xml方式管理事务 end-->
<!-- 注解方式管理事务 start -->
<!-- 1.开启注解驱动,2.在service类或者方法上使用注解@Transactional -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- 注解方式管理事务 end -->
3.6 需求
在地址栏输入action请求,action-service-dao。完成客户需求。
3.7 具体实现
- 创建客户实体类、映射文件、将映射文件引入hibernate核心配置文件中
-
- 创建action、service、dao。完成注入。
- a) 在类中添加属性生成set 方法
//serviceImpl private PhoneUserDao phoneUserDao; public void setPhoneUserDao(PhoneUserDao phoneUserDao) { this.phoneUserDao = phoneUserDao; } //action private PhoneUserService phoneUserService; public void setPhoneUserService(PhoneUserService phoneUserService) { this.phoneUserService = phoneUserService; }
-
b)在spring配置文件中完成注入
<!-- 配置dao对象 --> <bean id="phoneUserDao" class="com.zhougl.web.dao.impl.PhoneUserDaoImpl"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 配置service对象 --> <bean id="phoneUserService" class="com.zhougl.web.service.impl.PhoneUserServiceImpl"> <property name="phoneUserDao" ref="phoneUserDao"></property> </bean> <!-- 配置action 必须配置scope为多实例 --> <bean id="phoneUserAction" class="com.zhougl.web.action.PhoneUserAction" scope="prototype"> <property name="phoneUserService" ref="phoneUserService"></property> </bean>
网友评论