三大框架整合
1.导包hibernate
1)hibernate-release-5.0.7.Final\lib\required下所有
2)hibernate-release-5.0.7.Final\lib\jpa下的所有(就一个)java persist api java持久化规范
3)数据库驱动
2。导包struts2
1)struts-2.3.24-all\struts-2.3.24\apps\struts2-blank\WEB-INF\lib下边的所有jar包
这里边的javassist包重复需要删除版本低的那个jar包
2)struts 整合spring的jar包 struts-2.3.24-all\struts-2.3.24\lib目录下的
struts2-spring-plugin-2.3.24.jar
注意:如果倒入这个包 还没有配置spring容器 那么项目会报错,项目启动就会找spring容器所以
不适用spring容器时候不要倒入该包。
3.导包 Spring
基本4+2(在依赖包中)
core beans context expression login log4j
整合web web包
spring -web
整合aop包 4个
spring -aop spring-aspect aopalliance aopweaving
整合jdbc hibernate 事务 4个
spring-jdbc spring-tx c3p0(依赖包中) spring-orm(整合hibernate)
正Junit测试Test包
spring-test
39个包完整三大框架的搭建
4.jstl.jar standard.jar
4.共计41个包
二、单独配置spring容器
1.创建配置文件,并且倒入约束(四个约束,beans context aop tx)
2.指定配置spring容器随着项目的启动而启动
<!-- 让spring容器随着web启动而创建的监听器 -->
<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>
三、单独配置struts2
<struts>
<package name="spring04" namespace="/" extends="struts-default">
<action name="UserAction_*" class="com/ssh/web/UserAction"
method="{1}">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
2.配置struts的核心处理器
<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>
struts与spring 的 整合
1.导包struts-spring-plugins.jar
2.配置常量打开配置文件/org/apache/struts2/default.properties
<!-- struts.objectFactory = spring 将action的创建交给spring容器
struts.objectFactory.spring.autoWire= name sprign负责装配action依赖属性(默认情况下都是打开的
-->
(一)整合方案一:struts2自己创建的action。spring 负责组装依赖属性。
<constant name="struts.objectFactory " value="spring"></constant>
<package name="crm" namespace="/" extends="struts-default">
<!-- 整合方案一:class属性上任然配置action的完整类名
strtus仍然创建action。有spring负责组装
-->
<action name="UserAction_*" class="com.ssh.web.UserAction"
method="{1}">
<result name="success">/success.jsp</result>
</action>
</package>
组装依赖属性
<bean name="userAction" class="com.ssh.web.UserAction"></bean>
<bean name="us" class="com.ssh.service.UserServiceImpl"></bean>
不推荐这种方式:最好由spring完整管理Action的生命周期,spring中功能才能应用带action中。
(二)整合方案二:(重要的)
由spring负责创建Action和组装:
1. <!-- 整合方案二:class属性值为在spring配置文件中对应Action的bean name值 ,
这样就是的srping完全管理action的生命周期,包括action的创建
-->
<action name="UserAction_*" class="userAction" method="{1}">
<result name="success">/success.jsp</result>
</action>
2.<!-- spring管理action的方案二 把userService配置到Action的属性中-->
<bean name="userAction" class="com.ssh.web.UserAction" scope="prototype">
<property name="us" ref="us"></property>
</bean>
<bean name="us" class="com.ssh.service.UserServiceImpl"></bean>
四、单独配置hibernate
1.导包
2.书写配置文件
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/spring</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">xxx</property>
<!-- 不同的数据库,sql语法有所区别,指定的方言可以让hibernate -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 显示sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化sql -->
<property name="hibernate.format_sql">true</property>
<!-- 配置是否自动更新表 update 为自动更新,validate为如果不存在表或者某个属性将会报错 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 配置映射文件 -->
<mapping resource="com/ssh/domain/Customer.hbm.xml" />
<mapping resource="com/ssh/domain/LinkMan.hbm.xml" />
<mapping resource="com/ssh/domain/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
3.书写映射文件
Spring整合Hibernate
1.原理:SessionFactory对象交给spring容器管理
<!-- 加载配置方案1:仍然使用外部的Hibernate.cfg.xml配置信息 不建议使用-->
<bean name="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
</bean>
2.建立测试类进行测试获取Factory 进而对session到Transaction进行操作
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class HibernateTest {
@Resource(name = "sessionFactory")
private SessionFactory factory;
@Test
public void test2() {
Session session = factory.openSession();
Transaction transaction = session.beginTransaction();
// 执行操作
User u = new User();
u.setUser_code("JIM");
u.setUser_name("吉姆");
u.setUser_password("xinxijimu");
session.save(u);
transaction.commit();
session.close();
factory.close();
}
<!-- 加载配置方案2:在spring配置文件中放置hibernate配置信息 -->
<bean name="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!--配置hibernate的基本配置信息 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
<prop key="hibernate.connection.url">jdbc:mysql://localhost:3306/spring</prop>
<prop key="hibernate.connection.username">root</prop>
<prop key="hibernate.connection.password">xxxx</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!-- 配置orm元数据 ,指定orm元数据所在的包路径,spring会自动读取包哦个的所有配置文件 -->
<property name="mappingDirectoryLocations" value="classpath:com/ssh/domain">
</property>
</bean>
4.使用c3p0连接池管理连接
1)。配置db.properties
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/spring
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=xxx
2) <!-- 配置C3P0连接池 -
2) <!-- 配置C3P0连接池 -->
<!-- 指定spring读取db.properties配置 -->
<context:property-placeholder location="classpath:db.properties" />
<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
3)
<!-- 将连接池注入到SessionFactory -->
<property name="dataSource" ref="dataSource"></property>
5.spring整合hibernat操作数据库
1).Dao类继承HiberanteSupport
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
2)Hibernate模版操作。
2-1.HibernateCallback
// hql方式进行操作数据库
return getHibernateTemplate().execute(new HibernateCallback<User>() {
@Override
public User doInHibernate(Session arg0) throws HibernateException {
// TODO Auto-generated method stub
String hql = "from User where user_code = ?";
Query query = arg0.createQuery(hql);
query.setParameter(0, usercode);
User result = (User) query.uniqueResult();
return result;
}
});
2-2.execute方法
return getHibernateTemplate().execute(new HibernateCallback<User>() {
*
* @Override public User doInHibernate(Session session) throws
* HibernateException { // TODO String hql =
* "from User where user_code = JERRY"; Query query =
* session.createSQLQuery(hql); // query.setParameter(0, usercode); User
* user = (User) query.uniqueResult(); return user; } });
*/
/* */
/*
* // Criteria查询操作数据库 DetachedCriteria dc =
* DetachedCriteria.forClass(User.class);
* dc.add(Restrictions.eq("user_code", usercode)); List<User> list =
* (List<User>) getHibernateTemplate().findByCriteria(dc); if (list !=
* null && list.size() > 0) { return list.get(0); } else { return null;
* } }
*/
}
3).书写配置文件Dao注入springfactory
<bean name="userDao" class="com.spring.hibernate.dao.UserDaoImpl">
<!-- 因为使用了hiebrateTemplate对象实际上就是使用SessionFactory操作session操作数据库,所以进行配置SessionFacory -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
六、扩大Session作用范围
<!-- 扩大Session作用范围 注意:OpenSessionInview一定要在Struts的filteR之前调用 -->
<filter>
<filter-name>opensionInview</filter-name>
<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInview</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>