SSM即Spring、SpingMVC、MyBatis三种框架的结合使用,Spring框架可以看做为一个粘合剂的作用,用来粘合SrpingMVC和MyBatis框架。
我个人是想着把SSM框架整合分成两部分,Spring和MyBatis,然后再整合SpringMVC。
首先来看一下Spring和Mybatis。
第一步:首先是先配置数据源
<!-- 引入properties文件 -->
classpath:database.properties作为Bean容器,Spring框架提供了Ioc机制,可以接管所有组件的创建工作并进行依赖管理,因而整合的主要工作就是把MyBAtis框架使用中所涉及的核心组件配置到Spring容器中,交给Spring来创建和管理。具体来说,业务逻辑对象依赖基于MyBAtis技术实现的DAO对象,核心是获取SqlSession实例。要获得SqlSession实例,则需要依赖SqlSessionFactory实例。而SqlSessionFactory是SqlSessionFactoryBuilder依据配置文件中的数据源、SQL映射文件等信息来构建的。(也就是通过SqlSessionFactoryBuilder的builder()方法来构建的,builder()方法中的参数为InputStream文件流对象。上面有提到我们需要使用的SqlSessionFactory是SqlSessionFactoryBuilder依据配置文件中的数据源、SQL映射文件等信息来构建的,而在集成环境中则可以使用MyBatis-Spring整合包中的SqlSessionFactoryBean来代替。SqlSessionFactoryBean封装了使用SqlSessionFactoryBuilder创建SqlSessionFactory的过程,我们可以在Spring中以配置文件的形式通过配置SqlSessionFactoryBean获得SqlSessionFactory实例。可能会有人忘记了SqlSessionFactory以及SqlSession是用来干什么的,那么我们就来回顾一下SqlSessionFactory以及SqlSession。SqlSessionFactory:每个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心,首先获取SqlSessionFactoryBuilder对象,可以根据XML配置文件或Configuration类的实例构建该对象,然后通过SqlSessionFactoryBuilder的builder()方法来获得SqlSessionFactory对象实例,有了SqlSessionFactory对象之后,通过openSession()的方法进而获取SqlSession实例,SqlSession对象中完全包含以数据库为背景的所有自行SQL操作的方法。可以用该实例来直接执行已映射的SQL语句。(简单的一句话就是说SqlSessionFactory是用来获取SqlSession的,而SqlSession则是用来执行SQL语句的。)备注:SqlSessionFactory对象一旦创建,就会在整个应用运行过程中使用存在。没有理由去销毁或者在创建,最佳作用域为Application,跟随应用的声明周期一同存在。备注:SqlSession是用于执行持久化操作的对象类似于JDBC中的Connection。它提供了面向数据库执行SQL命令所需的所有方法,可以通过SqlSession实例直接运行已映射的SQL语句,SqlSession对应着一次数据库会话,由于数据库会话不是永久的,因此SqlSession的生命周期也不应该是永久的。相反,在每次访问数据库时都需要创建它,并不是说在SqlSession里只能执行一次SQL语句,可以执行多次,但是若是关闭了SqlSession,就要通过SqlSessionFactory的openSession()方法创建。第二步:配置SqlSessionFactoryBean: ClassPath:com/it/dao/*.xml那么我们SqlSessionFactoryBean配置完成之后应该做什么呢?对于MyBatis而言得到SqlSession,就可以进一步获取SqlSession示例进行数据库操作了,而在集成环境中,为更好的使用SqlSession,充分利用Spring框架提供的服务,MyBatis-Spring整合包中提供了SqlSessionTemplate类。SqlSessionTemplate类实现了MyBatis的SqlSession接口,可以替换MyBatis中原有的SqlSession实现类提供数据库访问操作。使用SqlSessionTemplate可以更好地与Spring服务融合并简化部分流程化的工作,可以保证和当前Srping事务相关联,自动管理会话的声明周期,包括必要的关闭、提交和回滚操作。但是如果只使用SqlSessionTemplate执行基本的数据库访问的操作,而不包含其他的非MyBatis的工作,可以不必手工编码使用SqlSessionTemplate或SqlSessionDaoSupport来实现此类Dao。MyBatis-Spring提供了MapperFactoryBean,能够已配置的方式生成映射器实现并注入给业务组件。(简单来说,就是我们没有必要在Dao层使用Dao接口的实现类来执行数据库增删改查的操作了,配置注入映射器它自己就帮我们执行了)所以第三步:配置注入映射器 在Spring配置文件中使用MapperFactoryBean对映射器做配置,简化了Dao模块的编码,不过如果映射器很多的话,相应的配置项也会很多。为了简化配置工作量,MyBatis-Spring中提供MapperScannerConfigurer,它可以扫描指定包中的接口并将他们注册为MapperFactoryBean。 配置信息如下: value里的信息为Dao层所在的包的路径。 到这里为止,关于DAO层的配置文件就已经配置完了,接下来是Service层的配置文件,大家现在都是用注解的方式来配置Service层,所以我们只需要在Service加上@Service(***),以及在相对应的需要调用的Mapper接口的上加上@Autowired或@Resource注解,然后再Spring配置文件中扫描Service注解就ok了。 第四步:扫描Service注解 但是业务层的只能不仅仅是调用DAO这么简单,事务处理是任何企业级应用开发中不能回避的一个重要问题,以往我们通过业务方法中硬编码的方式进行业务控制,这样做的弊端显而易见:事务代码分散在业务方法中难以重用,需要调整时工作量也比较大;复杂事务的编码难度较高,增加了开发难度等。Spring提供了声明式事务处理机制,它基于AOP实现,无需编写任何事务管理代码,左右的工作全在配置文件中完成,这意味着与业务代码完全分离,配置即可用,降低了开发和维护的难度。 所以第五步:使用注解的方式配置声明式事务管理器配置完成以后再业务层通过@Transactional注解即可为该类所有业务方法统一添加事务处理,如果某一业务方法需要采用不同的事务规则,可以在该业务方法上添加@Transactional注解进行单独设置。 @Transactional(propagation = Propagation.REQUIRED) public int insertBill(Bill bill) { try { return billMapper.insertBill(bill); } catch (RuntimeException e) { e.printStackTrace(); throw e; } }(书事务注解的属性:书上p194-p197)至此,Spring配置文件已经完成,那么MyBatis配置文件中需要什么呢?使用的时候只需要设置一下实体类别名就好了
10-03 14:41