Spring框架基本学习(四)

回顾SSH框架知识点

Hibernate框架

  1. hibernate核心配置文件
  • (0)orm思想
    • 对象关系映射
  • (1)数据库信息
  • (2)hibernate信息
  • (3)映射配置
  • (4)hibernate核心配置文件
  • 如果单纯使用hibernate框架,核心配置文件名称 hibernate.cfg.xml和位置 src下面 固定的
  • hibernate和spring整合时候,hibernate核心配置文件名称和位置没有固定要求的
  1. hibernate映射配置文件
    (1)实体类和数据库表映射关系—使用orm思想

  2. hibernate操作的步骤
    (1)在spring框架对hibernate框架进行封装,使用hibernateTemplate

Struts2框架

  1. Action操作
  • (1)action创建三种方式
    • 继承类 ActionSupport
  • (2)配置action访问路径
    • 创建struts.xml配置文件,这个文件名称和位置固定 src下面的
  • (3)配置访问action的多个方法
    • 使用通配符方式配置
  • (4)在action获取表单提交数据
    • 获取request对象
      ** 使用ServletActionContext类获取
    • 属性封装
    • 模型驱动(重点)
    • 表达式封装
  • (5)在action操作域对象
    • 使用ServletActionContext获取域对象
  • (6)配置struts2的过滤器
  1. 值栈
  • (1)向值栈放数据
    • set方法
    • push方法
    • 定义变量,生成get方法
  • (2)从值栈获取数据
    • 在jsp中使用struts2标签+ognl获取
    • <s:property>
    • <s:iterator>
  1. 拦截器
  • (1)aop和责任链模式
  • (2)自定义拦截器
    • 继承MethodFilterInterceptor
    • 重写类里面的方法
    • 配置拦截器和action关联

Spring框架

  1. spring核心配置文件
    (1)名称和位置没有固定要求
    (2)在spring核心配置文件中引入schema约束
  2. 创建对象
    (1)xml配置方式:
    (2)注解方式:四个注解
  3. 注入属性(对象类型属性)
    (1)xml配置方式:
    (2)注解方式:两个注解
  • autowired
  • resource
  1. 使用ServletContext对象和监听器实现
    (1)在服务器启动时候,加载spring配置文件,创建对象
    (2)配置spring的监听器
    (3)指定spring配置文件位置
  2. jdbcTemplate
  3. spring事务配置
    (1)xml方式
    (2)注解方式

SSH框架整合思想

  1. 三大框架应用在javaee三层结构
    在这里插入图片描述
  2. struts2框架和spring整合
    (1)struts2的action在spring配置
    在这里插入图片描述
  3. spring框架和hibernate框架整合
    (1)hibernate的sessionFactory交给spring配置
    (2)把hibernate数据库配置交给spring配置
    在这里插入图片描述

整合struts2和spring框架

  1. 把struts2的action交给spring管理

  2. 实现过程
    第一步 导入struts2的jar包
    (1)导入用于整合的jar包
    在这里插入图片描述
    第二步 创建action
    第三步 创建struts2核心配置文件,配置action
    (1)位置在src下面,名称是struts.xml
    第四步 配置struts2过滤器
    第五步 导入spring的jar包
    第六步 创建spring配置文件
    (1) 引入约束
    (2) 配置spring监听器
    (3) 指定spring配置文件位置

    <listener>
    	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
     <context-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:bean1.xml</param-value>
  	</context-param>

第七步 把action交给spring进行配置(***)

代码1
<!-- 配置action的对象 -->
	<bean id="userAction" class="cn.itcast.action.UserAction" scope="prototype"></bean>

(1)在spring配置action对象,在struts.xml中也配置action对象
(2)解决:
只需要在spring里面配置action对象,不要在struts.xml中配置

代码2
<struts>
	<package name="demo1" extends="struts-default" namespace="/">
		<!-- class属性里面不写action全路径了,因为写,action对象创建两次
			写spring配置的action的bean的id值
		 -->
		<action name="userAction" class="userAction"></action>
	</package>
</struts>

(1)在spring中配置action对象,在struts.xml中也配置action对象
(2)解决:只需要在spring里面配置action对象,不要在struts.xml中配置
住:代码2中的class值必须和代码1中的id值相同

Spring框架整合hibernate框架

  1. 把hibernate核心配置文件中配置数据库信息,把数据库信息在spring进行配置
  2. 把hibernate里面的sessionFactory创建交给spring管理

具体实现

第一步 导入hibernate的jar包
(1)导入struts2和hibernate的jar包时候有jar冲突问题
在struts2里面有jar包
在这里插入图片描述
在hibernate里面有jar包
在这里插入图片描述
删除低版本的jar包
(2)导入spring整合持久化层框架需要导入jar包
在这里插入图片描述
第二步 搭建hibernate环境搭建
1 创建实体类
2 配置实体类映射关系
3 创建核心配置文件
第三步 把hibernate核心配置文件数据库配置,在spring进行配置
(1)把hibernate核心文件中数据库配置去掉了,在spring配置

    <!-- 配置c3p0连接池 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<!-- 注入属性值 -->
		<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
		<property name="jdbcUrl" value="jdbc:mysql:///spring_day04"></property>
		<property name="user" value="root"></property>
		<property name="password" value="123456"></property>
	</bean>

第四步 把hibernate的sessionFactory交给spring配置
(1)服务器启动时候,加载spring配置文件,把配置文件中对象创建
(2)把sessionFactory对象创建在spring配置
(3)因为创建sessionFactory代码不是new出来的,而是多行代码实现的

	//加载核心配置文件
	cfg = new Configuration().configure();
	//创建sessionFactory
	sessionFactory = cfg.buildSessionFactory();

(4)spring里面针对上面情况,封装类,配置类对象可以创建sessionFactory

<!-- sessionFactory创建交给spring管理 -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
		<!-- 因为在hibernate核心配置文件中,没有数据库配置,数据库配置在spring里面配置,注入数据库配置dataSource -->
		<property name="dataSource" ref="dataSource"></property>
		
		<!-- 指定使用Hibernate核心配置文件 -->
		<property name="configLocations" value="classpath:hibernate.cfg.xml"></property>
	</bean>

第五步 在dao里面使用hibernateTemplate
在这里插入图片描述
(1)在dao得到hibernateTemplate的对象

    //得到hibernateTemplate对象
	private HibernateTemplate hibernateTemplate;
	public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
		this.hibernateTemplate = hibernateTemplate;
	}
    <!-- 创建实现类对象 -->
	<bean id="userDaoImpl" class="cn.itcast.dao.UserDaoImpl">
		<property name="hibernateTemplate" ref="hibernateTemplate"></property>
	</bean>
	
	<!-- 创建hibernateTemplate对象 -->
	<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
		<!-- 注入sessionFactoy -->
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>

(2)调用hibernate模板里面save方法添加

	User user = new User();
	user.setUsername("rose");
	user.setAddress("japan");
	//调用save方法实现添加
	hibernateTemplate.save(user);

注意:没有配置事务,做操作时候,出现异常
在这里插入图片描述
第六步 配置事务

    <!-- 第一步配置事务管理器-->
	<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
		<!-- 注入sessionFactory -->
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	
	<!-- 第二步  开启事务注解-->
	<tx:annotation-driven transaction-manager="transactionManager"/>

	@Transactional
	public class UserService {}

HibernateTemplate介绍

  1. HibernateTemplate对hibernate框架进行封装,
    直接调用HibernateTemplate里面的方法实现功能
  2. HibernateTemplate常用的方法
    • Serializable save(Object entity) :添加操作
    • void update(Object entity) :修改操作
    • void delete(Object entity) :删除操作
    • T get(Class entityClass, Serializable id) :根据id查询
    • T load(Class entityClass, Serializable id): 根据id查询
        //1 get方法:根据id查询
		User user = hibernateTemplate.get(User.class, 2);
		System.out.println(user.getUsername()+"::"+user.getAddress());

• List find(String queryString, Object… values) :查询操作的方法
find(String queryString,Object… valus):List<?>-
(1)第一个参数是 hql语句
(2)语句参数值

        //2 find方法查询所有记录
		List<User> list = (List<User>) hibernateTemplate.find("from User");
		for (User user : list) {
			System.out.println(user.getUsername()+"::"+user.getAddress());
		}

SSH框架整合过程(总结)

第一步 导入jar包
第二步 搭建struts2环境
(1)创建action,创建struts.xml配置文件,配置action
(2)配置struts2的过滤器
第三步 搭建hibernate环境
(1)创建实体类
(2)配置实体类和数据库表映射关系
(3)创建hibernate核心配置文件
* 引入映射配置文件
第四步 搭建spring环境
(1)创建spring核心配置文件
(2)让spring配置文件在服务器启动时候加载

  • 配置监听器
    <listener>
    	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
  • 指定spring配置文件位置
      <context-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:bean1.xml</param-value>
  	</context-param>

第五步 struts2和spring整合
(1)把action在spring配置(action多实例的)

       <!-- 配置action的对象 -->
	   <bean id="userAction" class="cn.itcast.action.UserAction" scope="prototype">

(2)在struts.xml中action标签class属性里面写 bean的id值

        <!-- class属性里面不写action全路径了,因为写,action对象创建两次
			写spring配置的action的bean的id值
		 -->
		<action name="userAction" class="userAction"></action>

第六步 spring和hibernate整合
(1)把hibernate核心配置文件中数据库配置,在spring里面配置

<!-- 配置c3p0连接池 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<!-- 注入属性值 -->
		<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
		<property name="jdbcUrl" value="jdbc:mysql:///spring_day04"></property>
		<property name="user" value="root"></property>
		<property name="password" value="123456"></property>
	</bean>

(2)把hibernate的sessionFactory在spring配置

<!-- sessionFactory创建交给spring管理 -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
		<!-- 因为在hibernate核心配置文件中,没有数据库配置,数据库配置在spring里面配置,注入数据库配置dataSource -->
		<property name="dataSource" ref="dataSource"></property>
		
		<!-- 指定使用Hibernate核心配置文件 -->
		<property name="configLocations" value="classpath:hibernate.cfg.xml"></property>
	</bean>

第七步 在dao里面使用hibernateTemplate
(1)在dao注入hibernateTemplate对象
(2)在hibernateTemplate对象中注入sessionFactory

<!-- 创建实现类对象 -->
	<bean id="userDaoImpl" class="cn.itcast.dao.UserDaoImpl">
		<property name="hibernateTemplate" ref="hibernateTemplate"></property>
	</bean>
	
	<!-- 创建hibernateTemplate对象 -->
	<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
		<!-- 注入sessionFactoy -->
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>

第八步 配置事务

    <!-- 第一步配置事务管理器-->
	<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
		<!-- 注入sessionFactory -->
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	
	<!-- 第二步  开启事务注解-->
	<tx:annotation-driven transaction-manager="transactionManager"/>
	@Transactional
	public class UserService {}

整合其他方式

  1. spring整合hibernate时候,可以不写hibernate核心配置文件
    (1)把hibernate核心配置文件中,基本信息配置和映射引入都放到spring配置
<!-- sessionFactory创建交给spring管理 -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
		<!-- 因为在hibernate核心配置文件中,没有数据库配置,数据库配置在spring里面配置,注入数据库配置dataSource -->
		<property name="dataSource" ref="dataSource"></property>
		
		<!-- 指定使用Hibernate核心配置文件 -->
		<!-- <property name="configLocations" value="classpath:hibernate.cfg.xml"></property>-->
		
		<!-- 配置hibernate基本信息 -->
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.format_sql">true</prop>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
			</props>
		</property>
		
		<!-- 配置映射文件引入 -->
		<property name="mappingResources">
			<list>
				<value>cn/itcast/entity/User.hbm.xml</value>
			</list>
		</property>
		
	</bean>

Spring分模块开发

  1. 在spring里面配置多个内容,造成配置混乱,不利用维护
  2. 把spring核心配置文件中,一部分配置放到单独的配置文件中,在spring核心配置文件中引入单独配置文件
    <!-- 引入其他spring配置文件 -->
	<import resource="classpath:user.xml"/>

初步完结

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值