SSH框架整合:
一、各框架知识点回顾
在没有其他框架时,单独的框架如何实现,以下伪代码:
持久层(Hibernate):
public class BookDao{ public void save(Book book){ Configuration cfg = new Configuration().configure(); SessionFactory sf = cfg.buildSessionFactory(); Session session = sf.openSession(); Transaction tx = session.beginTransaction(); session.save(book); tx.commit(); session.close(); } }
业务层(Spring):
public calss BookService{ private BookDao bookDao; public void setBookDao(BookDao bookDao){ this.bookDao = bookDao; } public void save(Book book){ bookDao.save(book); } }
<bean id="bookDao" class = "...BookDao"></bean> <bean id="bookService" class = "...BookService"> <property name = "bookDao" ref="bookDao"/> </bean>
WEB层(Struts2)
public class BookAction extends ActionSupport implements ModelDriven<Book>{ private Book book = new Book(); public Book getModel(){ return book; } public String save(){ WebApplicationContext wap = WebApplicationContextUtils.getWebApplicationContext(...); BookService bs = wap.getBean("bookService"); bs.save(book); } }
二、搭建SSH框架开发环境
1、创建WEB项目,引入相应jar包(Struts2、Spring、Hibernate框架开发相关)
struts2-convetion-plugin-2.3.15.3.jar---struts2的注解开发的jar包
struts2-spring-plugin-2.3.15.3.jar---struts2用于整合Spring的jar包
hibernate-distribution-3.6.10.Final\hiernate3.jar
hibernate-distribution-3.6.10.Final\lib\required\*.jar
hibernate-distribution-3.6.10.Final\lib\jpa\*.jar
slf4j-log4j12-1.7.2.jar---整合日志记录
com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar---连接池数据库驱动包
spring-tx-3.2.0.RELEASE.jar---事务管理
spring-web-3.2.0.RELEASE.jar--整合WEB项目
spring-jdbc-3.2.0.RELEASE.jar--事务管理
spring-orm-3.2.0.RELEASE.jar--整合Hibernate
spring-test-3.2.0.RELEASE.jar--整合Junit单元测试
IOC需要的jar包:
spring-beans-3.2.0.RELEASE.jar
spring-context-3.2.0.RELEASE.jar
spring-core-3.2.0.RELEASE.jar
spring-expression-3.2.0.RELEASE.jar
com.springsource.org.apache.log4j-1.2.15.jar---日志记录的jar包
com.springsource.org.apache.commons.logging-1.1.1.jar---日志整合的jar包
AOP需要的jar包:
spring-aop-3.2.0.RELEASE.jar
spring-aspects-3.2.0.RELEASE.jar
com.springsources.org.aopalliance-1.0.0.jar
com.springsources.org.aspectj.weaver-1.6.8.RELEASE.jar
2、引入相应的配置文件
Struts2框架的配置文件:
web.xml---配置核心过滤器(StrutsPrepareAndExecuteFilter类)
struts.xml---Struts2框架本身的配置文件(在SSH整合中使用纯注解方式时,此文件可省略)
Hibernate框架的配置文件:
hibernate.cfg.xml---核心配置文件(在SSH整合中可省略此文件)
映射文件
Spring框架的配置文件:
web.xml---配置核心监听器(ContextLoaderListener类)
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param>
applicationContext.xml---Spring的核心配置文件
log4j.properties---日志配置文件
3、创建包结构(action、service、dao、domain)
(一)Struts2整合Spring框架
4、创建页面(WebRoot下新建jsp页面)
部署项目到Tomcat访问本地jsp页面
5、编写Action、Service和Dao
Service层注入Dao
Action中通过整合jar包自动注入,提供Service的set()方法即可
6、配置Action、Service和Dao的类
Service和Dao交给Spring管理,在applicationContext.xml中配置
Struts2和Spring整合的两种方式:
(1)Action的类由Struts2自身去创建;---在struts.xml中配置
(2)Action的类交给Spring框架创建(可以交给Spring的AOP去管理)---配置时手动注入Service(Action创建类是多例,Spring创建类默认是单例模式,所以交由Spring创建时需要设置scope = "prototype")
(二)Spring整合Hibernate框架
7、创建数据库
8、创建映射文件---类和表的对应关系(Hibernate会根据此文件在数据库中创建表结构)
9、Spring整合Hibernate
jdbc.properties属性文件
在applicationContext.xml中配置连接池(ComboPooledDataSource类),引入外部属性文件
在applicationContext.xml中配置Hibernate的相关属性SessionFactory,注入连接池,加载映射文件
10、编写DAO中的代码 extends HibernateSaoSupport 注入SessionFactory
配置DAO时
<bean id = "productDao" class="...ProductDao"> <property name="sessionFactory" ref = "sessionFactory"/> </bean>
在DAO中调用模板完成保存操作
this.getHibernateTemplate().save(product);
11、事务管理
在applicationContext.xml中配置事务管理器(HibernateTransactionManager类),注入sessionFactory,开启注解事务使用<tx:annotation-driven/>标签,引入HibernateTransactionManager的ID,在业务层的类上添加@Transaction注解
三、综合案例
SSH框架
未整合前的代码编写
SSH框架整合
SSH知识点回顾
WEB层(V):Struts2
业务层(C):Spring
持久层(M):Hibernate
整合之后就不用写这么多繁琐的代码。
Hibernate使用ServiceRegistryBuilder出错
原因:版本4之后的Hibernate中buildServiceReguistry()方法被替换了。
解决方法:(1)版本导入更换为:
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
(2)在版本4中的用法:
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
(3)在版本5中的用法:
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
2018-03-27
ssh框架知识点回顾
web层 Struts2
业务层 Spring
持久层 Hibernate
通常web层区调用业务层,业务层调用持久层
SSH框架知识点
ssh。。。
public class BookAction extends ActionSupport implements ModelDriven<Book> (){ private Book book = new Book(); public Book getBook(){ return book; } public String save(){ WebApplicationContext web = WebApplicationContextUtils.getWebApplicationContext(); BookService service = web.getBean("bookService"); service.save(book); } }
public class BookService{ private BookDao bookDao; public void setBookDao(BookDao bookDao){ this.bookDao = bookDao; } public void save(Book book){ bookDao.save(book); } }
<bean id="bookDao" class="...BookDao"></bean>
<bean id="bookService" class="...BookService">
<property name="bookDao" ref="bookDao"/>
</bean>
web层(struts2)
业务层(spring)
持久层(hibernate)
public class BookDao{ public void save(Book book){ Configuration cf = new Configuration().configure(); SessionFactory sf = cf.buildSessionFactory(); Session session = sf.openSession(); Transation tx = session.beginTransation(); tx.save(book); tx.commit(); session.close(); } }
侧鹅鹅鹅饿饿
ssh 框架图
ssh整合篇-SSH框架的知识点回顾
ssh知识点整合
ssh框架知识点回顾:
业务层调用持久层:spring的ioc容器管理对象的相互依赖和对象的生命周期。依赖注入需要提供该属性的set方法,也可以通过注解的方式注入。
不使用spring单使用每个框架,操作数据的原始代码感觉很难。
在不实用spring管理对象时的hibernate访问数据库的整套流程是:
新建configuration对象cfg 》调用configura对象的config(“hibernate.xml”)方法,此方法需要hibernate的核心配置文件。再调用此对象的buildSessionFactory()方法获取到sessionFactory,利用sessionFactory获取session对象方法为:sessionFactory.OpenSession()
,开启session对象的事务方法是beginTransaction(),调用session去与数据库交互,交互完成后,确定事务的操作,关闭session。
web层 业务层 持久层 简称
struts2 spring hibernate ssh
springMVC spring mybatis ssm
Spring
SSH框架知识点回顾