spring整合其他两个框架

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37256896/article/details/81948723

Spring整合其他两大框架原理:
                            web层:用struts2+jsp然后Action对象交给Spring管理
                            service层:JavaBean直接交给Spring 管理
                            dao :hibernate中的sessionfactory和Session获得,aop事务都交给Spring管理都由Spring容器来创建和维护
                导包:
                       struts2:基本包+    struts2-spring-plugin-2.5.16是struts把Action对象交给Spring的插件如果没有Spring容器则会报错
                    Spring:基础包:core|bean.context,expression,logging,log4j.   web:-web,    aop:aop,aspect,aopweaving,aop联盟,事务:jdbc,tx,c3p0,orm,测试:-test,
                       hibernate:操作数据库的规范-entitymanager;
                    
                导入约束:
                    web应用单独配置Spring容器:在web 的xml配置如下:

 <!--将 web 引入Spring容器中  由于不写*号项目会运行不成功,所以要加上*号-->
                                        <context-param>
                                                <param-name>contextConfigLocation</param-name>
                                                <param-value>classpath*:/applicationContext3.xml</param-value>
                                         </context-param>

 web应用单独整合struts2:  在web 的xml配置如下:
                                        

                                 <!-- 配置struts -->
                                         <filter>
                                              <filter-name>struts2</filter-name>
                                              <filter-class>
                                             org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
                                              </filter-class>
                                           </filter>
                                           <filter-mapping>
                                              <filter-name>struts2</filter-name>
                                              <url-pattern>/*</url-pattern>
                                           </filter-mapping>


  web单独整合hibernate :
                                    1.配置实体映射文件:
                                            

<?xml version='1.0' encoding='UTF-8'?>  
                                            <!DOCTYPE hibernate-mapping PUBLIC  
                                             "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
                                             "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
                                             <!-- 映射文件 -->
                                             <hibernate-mapping>
                                             <!-- <hibernate-mapping> 为根元素的 XML 文件,里面包含所有<class>标签。
                                            <class> 标签是用来定义从一个 Java 类到数据库表的特定映射。
                                            Java 的类名使用 name 属性来表示,数据库表明用 table 属性来表示。 -->
                                                    <class name="com.leo.domain.User" table="user">
                                                    <!-- <meta> 标签是一个可选元素,可以被用来修饰类。 -->
                                                        <meta attribute="class-description">
                                                     This class contains the employee detail. 
                                                    </meta>
                                                    <!--主键标签   -->
                                                        <id name="id" type="int" column="id">
                                                                <!--generator用来自动生成主键 ,class有以下属性native,使用算法创建主键 -->
                                                                <generator class="assigned"></generator>  
                                                        </id>
                                                        <!-- property用来使属性与数据库表的列匹配 标签中 name 属性引用的是类的性质,column 属性引用的是数据库表的列。
                                                        type 属性保存 Hibernate 映射的类型,这个类型会将从 Java 转换成 SQL 数据类型。-->
                                                                <property name="name" column="name" type="string"/>
                                                            <property name="password" column="password" type="string"/>
                                                            <property name="email" column="email" type="string"/>
                                                    </class>
                                             </hibernate-mapping>


                                    2.配置hibernate 配置文件:
                                            

<hibernate-configuration>
                                                <session-factory>
                                                <!--数据库的驱动,URL,用户名,密码,hibernate方言,打印sql,映射文件  -->
                                                <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
                                                <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
                                                <property name="connection.username">root</property>
                                                <property name="connection.password">123</property>
                                                <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
                                                <property name="show_sql">true</property>
                                                <mapping resource="com/leo/domain/user.hbm.xml"/> 
                                                </session-factory>
                                            </hibernate-configuration>

spring整合struts:

导包:struts2-spring-plugin.jar是struts中的Action交于Spring容器
                  在struts.xml配置:
                                配置常量:struts.objectFactory=spring   :把action创建交给Spring容器
                                            struts.objectFactory.spring.autowise=name   ,Spring负者依赖注入属性
                            整合方式一:
                                         整合方案一:用原来的class属性来使用
                                                    由struts创建对象,Spring用来组装和管理    
                                        <package name="" namespace="/" extends="struts-default">
                                            <!-- 整合方案一:用原来的class属性来使用
                                            由struts创建对象,Spring用来组装和管理    
                                         -->
                                            <action name="userAction_" class="com/leo/struts2/UserAction.java" method="{1}">
                                                <result name="suceesss">/index.jsp</result>
                                            </action>
                                        </package>
                                    自动装配时其实就是属性的注入:必须提供setget方法,然后属性名与<bean>下的name一致,这样就可以交给Spring容器来创建管理对象
                            整合方式二(推荐使用):
                                在applicationContext.xml配置如下:class属性填写Spring中action对象的beanName,就是spring管理的xml中配置的bean的名字。完全有Spring来创建管理action的周期 注意;Spring不能自动组装,只能手动注入依赖属性
                                        <!-- action对象的作用范围一定为多例 这样才符合struts2架构 -->
                                            <!-- 这是有Spring来创建和管理 注意;Spring不能自动组装,只能手动注入依赖属性 -->
                                            <bean name="userAction" class="com.leo.struts2.UserAction" scope="prototype">
                                                <property name="userservice" ref="userService"></property>
                                             </bean>
                                            <bean name="userservice" class="com.leo.service.impl.UserServiceImpl"></bean>
                                            </beans>

struts.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
		<!-- 配置常量意思是否把action对象交给Spring容器来管理和创建 -->
		<constant name="struts.objectFactory" value="spring"></constant>
		<!-- 用来配置Action的的依赖注入属性 -->
		<constant name="struts.objectFactory.spring.autoWire" value="name"></constant>
		
		<package name="" namespace="/" extends="struts-default">
			<!-- 整合方案一:用原来的class属性来使用
			由struts创建对象,Spring用来组装和管理	
		 -->
			<action name="userAction_" class="com/leo/struts2/UserAction.java" method="{1}">
				<result name="suceesss">/index.jsp</result>
			</action>
			<!--方案二:	class属性填写Spring中action对象的beanName,就是spring管理的xml中配置的bean的名字。完全有Spring来创建管理action的周期
									注意;Spring不能自动组装,只能手动注入依赖属性 -->
			<action name="userAction_" class="userAction" method="{1}">
				<result name="suceesss">/index.jsp</result>
			</action>
		</package>
</struts>

引入连接池同时把池也交给spring来管理:

引入C3p0连接池:
									创建c3p0配置文件:
										在applicationContext.com读取到这个然后交给Spring容器注入到SessionFactory对象中
											<!-- 配置c3p0连接池 -->
										<!-- 指定spring读取db.properties配置 -->
										<context:property-placeholder location="classpath:db.properties"  />
										<!-- 1.将连接池 -->
										<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>
										<bean name="sFactory" class="org.springframework.orm.hibernate5.LocalSessionFactotyBean">
										<!-- 将连接池注入到sessionfactory ,hibernate 获得连接 -->
										<property name="dataSource" ref="dataSource"></property>
										<property name="hibernateProperties">
											<props>
													<!-- <prop key="hibernate.hbm2ddl.auto" >update</prop>
													<prop key="hibernate.connection.driver_class" >com.mysql.jdbc.Driver</prop>
													<prop key="hibernate.connection.username" >root</prop>
													<prop key="hibernate.connection.password" >123</prop> -->
													<prop key="hibernate.dialect" >org.hibernate.dialect.MySQL5InnoDBDialect</prop>
													<prop key="show_sql" >true</prop>
													<prop key="hibernate.format_sql" >true</prop>
											</props>
										</property>

这样就是一个完整的spring整合struts的

spring整合hibernate:

Spring配置文件:
                              

<!-- 将sessionFactory配置到文件中
                                        1仍然外部的hibernate.cfg.xml
                                    <bean name="sFactory" class="org.springframework.orm.hibernate5.LocalSessionFactotyBean">
                                        <property name="configLocation" value="class:hibernate.cfg.xml"></property>
                                    </bean>
                                     -->
                                    <!-- 方式二:在Spring中配置 hibernate.cfg.xml-->
                                    <bean name="sFactory" class="org.springframework.orm.hibernate5.LocalSessionFactotyBean">
                                        <property name="hibernateProperties">
                                            <props>
                                                    <prop key="hibernate.hbm2ddl.auto" >update</prop>
                                                    <prop key="hibernate.connection.driver_class" >com.mysql.jdbc.Driver</prop>
                                                    <prop key="hibernate.connection.username" >root</prop>
                                                    <prop key="hibernate.connection.password" >123</prop>
                                                    <prop key="hibernate.dialect" >org.hibernate.dialect.MySQL5InnoDBDialect</prop>
                                                    <prop key="show_sql" >true</prop>
                                                    <prop key="hibernate.format_sql" >true</prop>
                                            </props>
                                        </property>
                                        <!-- 引入元数据 方式一:这是通过在列表中指定相应的实体-->
                                        <property name="mappingResource">
                                            <list> <value>com/leo/domain/user.hbm.xml</value></list>
                                        </property>
                                        <!-- 引入元数据方式二:直接可以读取这个包下面的所有的映射文件-->
                                        <property name="mappingDirectoryLocations">
                                             <value>classpath:com/leo/domain</value>
                                        </property>
                                    </bean>

     
 扩大Session的作用域:
                                在web.xml中配置扩大session的作用域:
                                

 <!--配置session的作用域 
                                        注意 openSessionInView一定要在struts中的filter的之前
                                     -->
                                     <filter>
                                          <filter-name>openSessionInView</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>
/**
 * 通过用Spring提供的
 * @author leoi555
 *
 */
public class UserDaoImplByHibernateSupport extends HibernateDaoSupport implements UserDao{
	
	@Override
	public void addUser(User user) {
		// TODO Auto-generated method stub
		super.getHibernateTemplate().save(user);
	}

	@Override
	public void deleteUser(int id) {
		// TODO Auto-generated method stub
		
		SessionFactory sessionFactory=getHibernateTemplate().getSessionFactory();
		Session session=sessionFactory.openSession();
		User user=session.get(User.class, 3);//
		session.delete(user);//
		System.out.println("删除成功");
		session.close();
	}

	@Override
	public void updateUser(User user) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public User getUserbyId(Integer id) {
		// TODO Auto-generated method stub
		//执行查询
//		return getHibernateTemplate().execute(new HibernateCallback<User>() {
//
//			@Override
//			public User doInHibernate(Session session) throws HibernateException {
//				// TODO Auto-generated method stub
//				String hql="from User where id=?";
//				Query<User> createQuery = session.createQuery(hql);
//				createQuery.setParameter(0, id);
//				User user = createQuery.uniqueResult();
//				return user;
//			}
//		});
		//用criteria查询
		DetachedCriteria dc=DetachedCriteria.forClass(User.class);
		dc.add(Restrictions.eq("id",id));
		List<User> list=(List<User>) getHibernateTemplate().findByCriteria(dc);
		if (list!=null && list.size()>0) {
			return list.get(0);
		}else {
			return null;
		}
	}

	@Override
	public int getTotalCount() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public List<User> getAllUser() {
		// TODO Auto-generated method stub
		return null;
	}

}

测试:

/**
 * 通过交给Spring来实现
 * @author leoi555
 *
 */
public class HibernateSupportTest {
	private UserDao userDao;
	@Test
	public void delete() {
		ApplicationContext context=new ClassPathXmlApplicationContext("Beans.xml");
		userDao=(UserDao) context.getBean("userDao");
		User user=new User();
		user.setId(1);
		userDao.deleteUser(user.getId());
		System.out.println("删除成功");
	}
}

猜你喜欢

转载自blog.csdn.net/qq_37256896/article/details/81948723
今日推荐