Spring+Hibernate+Struts2整合[整体思路][1/6]
Spring+Hibernate+Struts2整合,分成了6个章节分开讲解,本章节主要讲解了大体思路,入门篇!
- Hibernate:
- hibernate.cfg.xml配置sessionFactroy以及其他信息。
- POJO.hbm.xml配置对象关系映射信息。
- 实体类POJO。
- Struts2:
- struts.xml配置视图以及action信息。
- 在Spring可以使用注解方式,则无需xml文件配置。
- Jar包:整合Jar包、(如需注解,还有注解Jar包,其他整合选用其他Jar包)。[struts2-spring-plugin-2.3.34.jar][struts2-convention-plugin-2.3.34.jar]
- Spring:
- Ioc/DI(action层、service层、dao层以及其他需要管理的类)主要用于管理Bean对象以及依赖注入。
- AOP(主要声明式事务管理):事务的开启、提交、回滚、关闭等操作与业务解耦,由Spring统一管理,运用的是AOP技术。
有了以上的简单思想后,开始整合设计:
配置方式大致分为2类:
- 一类是xml配置
- 一类是注解配置
不论哪一种,先从数据源dataSource和session工厂的配置下手:
- 数据源dataSource:
数据源交给Spring管理:数据源有很多选择,比如常见的c3p0、dbcp等;
以c3p0为例:
1 <!-- 配置数据源[以读取外部属性文件的形式] --> 2 <context:property-placeholder 3 location="classpath:jdbc.properties" /> 4 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 5 <property name="driverClass" value="${driverClass}"></property> 6 <property name="jdbcUrl" value="${jdbcUrl}"></property> 7 <property name="user" value="${user}"></property> 8 <property name="password" value="${password}"></property> 9 <property name="initialPoolSize" value="${initialPoolSize}"></property> 10 <property name="minPoolSize" value="${minPoolSize}"></property> 11 <property name="maxPoolSize" value="${maxPoolSize}"></property> 12 </bean>
jdbc.properties
driverClass=com.mysql.cj.jdbc.Driver jdbcUrl=jdbc:mysql://localhost:3306/zhangpn?serverTimezone\=GMT&useSSL\=false user=root password=zhangpn initialPoolSize=5 minPoolSize=5 maxPoolSize=10
使用properties文件易于管理(推荐使用);
- 会话工厂sessionFactory:
sessionFactory交给Spring管理:在sessionFactory中配置POJO类是以xml方式配置还是注解配置
<!-- 配置session工厂 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <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> <!-- 需要去了解学习 --> <prop key="javax.persistence.validation.mode">none</prop> <!-- Session绑定线程 --> <prop key="hibernate.cunrrent_session_context_class">org.springframework.orm.hibernate5.SpringSessionContext</prop> </props> </property> <property name="packagesToScan"> <array> <value>com.zhangpn.entity</value> </array> </property> </bean>
以上是通过注解的方式配置的,主要是<property name="packagesToScan">扫描指定包是否有注解;
<!-- ======================== Introduction ============================== --> <!-- 映射配置文件方式 --> <!-- --> <!-- <property name="mappingLocations"> <value>classpath:/com/zhangpn/entity/Book.hbm.xml</value> </property>
以上一小段是通过配置文件配置的;[殊途同归,看应用场景而选择]
- 声明式事务管理:
首先,声明事务管理员,相当于AOP技术中Aspect的意思,封装了对事务的开启等各种操作方法,让你用于嵌入你的方法,省去了你在业务中耦合事务操作的代码;
<!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean>
2种配置方式:
-
- xml配置
<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="save*" propagation="REQUIRED" isolation="READ_COMMITTED" /> <tx:method name="create*" propagation="REQUIRED" isolation="READ_COMMITTED" /> <tx:method name="update*" propagation="REQUIRED" isolation="READ_COMMITTED" /> <tx:method name="delete*" propagation="REQUIRED" isolation="READ_COMMITTED" /> <tx:method name="query*" propagation="SUPPORTS" read-only="true" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut expression="execution(* com.zhangpn.serviceImpl.*.*(..))" id="txMethod" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="txMethod" /> </aop:config>
-
- 注解配置
<tx:annotation-driven transaction-manager="transactionManager"/>
在业务service层中:(示例代码)
@Service("customerService")
@Transactional(readOnly=true,propagation=Propagation.SUPPORTS)
public class CustomerServiceImpl implements ICustomerService {
@Resource(name="customerDao")
private ICustomerDao customerDao;
@Override
public List<Customer> findAllCustomer(DetachedCriteria dCriteria) {
return customerDao.findAll(dCriteria);
}
@Override
@Transactional(readOnly=false,propagation=Propagation.REQUIRED)
public void saveCustomer(Customer customer) {
customerDao.save(customer);
}
}
其实,配置完以上的内容,已经完成了与hibernate整合的大部分内容了。
接下来,开始进行web.xml的配置,以及对action、service、dao层的具体配置。请看下一章节;
凝一眸碧水,拈一缕清风,于一怀静谧中倾听凡尘的落音。
不再奢求什么,做简单的自己,过简单的生活,心在,梦在,你在,便是光阴赐予我的最美。

浙公网安备 33010602011771号