SSH框架整合的基本步骤
1.加入Spring
1).加入jar包
2).配置Web.xml文件
<!-- 配置Spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
3 ).加入Spring配置文件
2.加入Hibernate
1).同时建立持久化类,和其对应的.hbm.xml文件,生成对应的数据表
2).Spring 整合Hibernate
3).步骤:
①.加入jar包
②.在类路径下加入hibernate.cfg.xml文件,在其中配置hibernate的基本属性(方言、是否显示及格式化SQL、生成数据的策略、二级缓存)
③.建立持久化类,和对应的.hbm.xml文件
④.和Spring进行整合
Ⅰ.加入c3p0的驱动
erro:can’t find com.mchange.v2.c3p0.ComboPooledDataSource!
Q:版本0.9.2.1的C3P0jar包需要培mchang-commons-java 的jar包。
Ⅱ.在Spring的配置文件中配置:
1)、数据源(写好资源文件db.properties)
mysql的账户、密码、url、driverclass、初始化连接池
<!-- 导入资源文件 -->
<context:property-placeholder location="classpath:db.properties" />
<!-- 配置C3P0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="initialPoolSize" value="${jdbc.initialPoolSize}"></property>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
</bean>
2)、SessionFactory
加载数据源、加载配置文件、加载映射对象
<!-- 配置SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<!-- 数据库连接 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 加载资源文件 -->
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
<!-- 加载映射对象 -->
<property name="mappingLocations" value="classpath:com/silver/ssh/entities/*.hbm.xml"></property>
</bean>
3)、声明式事务
1配置hibernate的事务管理器
2配置事务属性
3 配置书屋切入点,事务属性关联事务切入点
<!-- 配置Spring的声明式事务 -->
<!-- 1配置hibernate的事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 2配置事务属性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="lastNameIsValid" read-only="true" />
<tx:method name="*" />
</tx:attributes>
</tx:advice>
<!--3 配置书屋切入点,事务属性关联事务切入点 -->
<aop:config>
<aop:pointcut expression="execution(* com.silver.ssh.service.*.*(..))"
id="txPointcut" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" />
</aop:config>
⑤.启动项目,生成对应的数据表
3.加入Struts2
1).加入jar包 :若有重复jar包删除版本较低。
2).在web.xml 文件中配置Filter
<!-- 配置Struts2 -->
<filter>
<filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3).加入Struts2的配置文件
<constant name="struts.enabl.DynamicMethodInvocation" value="true"></constant>
<constant name="struts.devMode" value="ture" />
<package name="default" namespace="/" extends="struts-default">
4).整合Spring
①.加入Struts2的Spring插件的jar包
struts2-spring-plugin.jar
②.在spring中正常配置Action ,注意Action的scope为prototype (多例模式)
③.在struts2的配置文件中配置Action时,class属性指向该 Action 在 IOC 中的id(注意匹配)
4.完成功能
1).获取所有员工信息:若在Dao 中只查询Employee 的信息,而且Employee 的Department
还是使用的懒加载,页面上还需要显示员工信息,此时会出现懒加载异常;
.org.hibernate.LazyInitializationException: could not initia
解决:
①.打开懒加载:不推荐(效率低)
②.获取Employee 时使用 迫切左外连接同时初始化其关联的Employee对象
③.使用OpenSessionInViewFilter:
2).删除员工信息
①。正常删除,返回值要是redirect类型,重定向到emp-list
②。使用jquery完成删除确认
PS:jquery的JS文件不能放在web-inf目录下
③。Ajax使用参照struts-2.3.29/docs/docs/ajax.html
3).添加员工:
① 、使用Struts2 的ModelDriven 和Preparable
② 、在前台页面传入输入值到值栈
③ 、时间是一个字符串,转化为Date。
4).修改员工:
一、在界面中添加隐藏域,用以储存未更改的值
二、在后台创建Model时从数据库读取,然后仅更改变更部分