SSM框架

	SSM即Spring、SpingMVC、MyBatis三种框架的结合使用,Spring框架可以看做为一个粘合剂的作用,用来粘合SrpingMVC和MyBatis框架。
	我个人是想着把SSM框架整合分成两部分,Spring和MyBatis,然后再整合SpringMVC。
	首先来看一下Spring和Mybatis。
	第一步:首先是先配置数据源
	

    <!-- 引入properties文件 -->
     <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
      <property name="location">
       <value>classpath:database.properties</value>
      </property>
     </bean>
     <!-- 配置数据源 -->
     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
      <property name="driverClassName" value="${driver}" />
      <property name="url" value="${url}" />
      <property name="username" value="${user}" />
      <property name="password" value="${password}" />
     </bean>
    	

 - 作为Bean容器,Sring框架提供了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:
        	<!-- 配置SqlSessionFactoryBean -->
         <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
          <!-- 引用数据源 -->
          <property name="dataSource" ref="dataSource"/>
          <!-- 引用MyBAtis配置文件中的配置 -->
          <property name="configLocation" value="classpath:MyBatise.xml"/>
          <property name="mapperLocations">
           <list>
            <value>
             ClassPath:com/it/dao/*.xml
            </value>
           </list>
          </property>  
         </bean>
        	
    
     - 那么我们SqlSessinFactoryBean配置完成之后应该做什么呢?对于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接口的实现类来执行数据库增删改查的操作了,配置注入映射器它自己就帮我们执行了)

	

    所以第三步:配置注入映射器
    	<bean id="xxxMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
     		 <property name="mapperInterface" value="com.it.dao.xxxMapper"/>
      		<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
     	</bean>
     	

 - 在Spring配置文件中使用MapperFactoryBean对映射器做配置,简化了Dao模块的编码,不过如果映射器很多的话,相应的配置项也会很多。为了简化配置工作量,MyBatis-Spring中提供MapperScannerConfigurer,它可以扫描指定包中的接口并将他们注册为MapperFactoryBean。

 	配置信息如下:
 	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  		<property name="basePackage" value=""/>
 	</bean>
 	value里的信息为Dao层所在的包的路径。
 	

 - 到这里为止,关于DAO层的配置文件就已经配置完了,接下来是Service层的配置文件,大家现在都是用注解的方式来配置Service层,所以我们只需要在Service加上@Service(***),以及在相对应的需要调用的Mapper接口的上加上@Autowired或@Resource注解,然后再Spring配置文件中扫描Service注解就ok了。

 	第四步:扫描Service注解
 	<context:component-scan base-package="com.it.service"/>
 	

 - 但是业务层的只能不仅仅是调用DAO这么简单,事务处理是任何企业级应用开发中不能回避的一个重要问题,以往我们通过业务方法中硬编码的方式进行业务控制,这样做的弊端显而易见:事务代码分散在业务方法中难以重用,需要调整时工作量也比较大;复杂事务的编码难度较高,增加了开发难度等。Spring提供了声明式事务处理机制,它基于AOP实现,无需编写任何事务管理代码,左右的工作全在配置文件中完成,这意味着与业务代码完全分离,配置即可用,降低了开发和维护的难度。

 	所以第五步:使用注解的方式配置声明式事务管理器
 

 - <!-- 事务管理器 -->  <bean id="txManager"  	
   class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
   	 <property name="dataSource" ref="dataSource"/>  </bean> 
   <tx:annotation-driven transaction-manager="txManager"/>
   
    -

配置完成以后再业务层通过@Transactional注解即可为该类所有业务方法统一添加事务处理,如果某一业务方法需要采用不同的事务规则,可以在该业务方法上添加@Transactional注解进行单独设置。

 @Transactional(propagation = Propagation.REQUIRED)
 public int insertBill(Bill bill) {
  try {
   return billMapper.insertBill(bill);
  } catch (RuntimeException e) {
   e.printStackTrace();
   throw e;
  }
 

	

 - 至此,Spring配置文件已经完成,那么MyBatis配置文件中需要什么呢? 	使用的时候只需要设置一下实体类别名就好了

	

    <configuration>
     		<typeAliases>
      		<!-- 设置别名 -->
      		<!-- <typeAlias alias="user" type="cn.smbms.pojo.User"/> -->
      			<package name="com.it.pojo"/>
    		 </typeAliases> 
    	</configuration>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值