Crowdfunding:SSM Integration Ideas

1、首先来看看思路图:

Crowdfunding:SSM Integration Ideas

分析:框架搭建好了之后,我们是Controller(或者Handle)去调Service,Service去调Mybatis的Mapper来操作数据库DB。

为什么Mapper能够操作数据库呢?

回答:有框架提供的支持——数据源DataSource,通过数据源来获取数据库的连接,连接后需要将数据源装配给SqlSessionFactory,在Mybatis中是叫SqlSessionFactory,但是在Spring整合中是叫SqlSessionFactoryBean,而SqlSessionFactoryBean是通过SqlSession去给Mapper提供支持,但是通过Spring整合之后,我们不再操作SqlSession了,我们在开发中直接就是使用Mapper,前面都是底层的东西,在Service上有声明式事务,比如有好几个操作,其中一个失败了,别的要跟着一起回滚,声明式事务需要一个事务管理器(TransationManager), 事务管理器也需要装配数据源,还需要配置事务的通知以及事务的切入点表达式,TransationManager需要装配到事务的通知(tx:advice)里面,需要aop:poincut名称空间,还需要aop:advisor将aop:poincut和tx:advice给关联起来,三者的关系就是一个声明式事务。tx:advice配置的事务的属性:事务的传播行为、隔离级别、超时属性、只读属性。

2、思路的扩展

Crowdfunding:SSM Integration Ideas

将配置划分成具体并且单一的配置文件里面,其实可以都放在一起,只是这样更加容易维护一些,然后通过ContextLoaderListener监听器去读取spring-tx.xml和spring-mybatis.xml配置文件,然后创建IOC容器。为了能读取出来,所以才将spring-tx.xml和spring-mvc.xml给区分出来。对于spring-tx与spring-mybatis都是属于持久化层的,mvc为web层的。

Crowdfunding:SSM Integration Ideas

spring-web-mvc.xml找的是DispatcherServlet组件,然后ContextLoaderListener与DispatcherServlet由web.xml去配。