首页 > 代码库 > spring同mybatis整合的总结及配置

spring同mybatis整合的总结及配置

1.Springmybatis的整合步骤?

                  技术分享

整合的代码:

<bean id="dataSource" destroy-method="close" class="com.mchange.v2.c3p0.ComboPooledDataSource">

<property name="driverClass" value=http://www.mamicode.com/"oracle.jdbc.driver.OracleDriver"/>

<property name="jdbcUrl" value=http://www.mamicode.com/"jdbc:oracle:thin:@localhost:1521:orcl"/>

<property name="user" value=http://www.mamicode.com/"hotelsup"/>

<property name="password" value=http://www.mamicode.com/"123"/>

<property name="maxPoolSize" value=http://www.mamicode.com/"40"/>

<property name="minPoolSize" value=http://www.mamicode.com/"1"/>

<property name="initialPoolSize" value=http://www.mamicode.com/"1"/>

<property name="maxIdleTime" value=http://www.mamicode.com/"60"/>

<property name="checkoutTimeout" value=http://www.mamicode.com/"2000"/>

</bean>

<!-- 配置SqlSessionFactory -->

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="dataSource"/>

<!-- 指的是当前的mybatis的配置文件 -->

<property name="configLocation" value=http://www.mamicode.com/"classpath:mybatis-config.xml"></property>

</bean>

 

2.spring提供的aop对于业务层的事务实现(声明式事务处理)。

 技术分享

applicationContext.xml里的配置:

<!-- 配置spring的声明式事务 -->

<!-- 事务管理的bean -->

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"

        <property name="dataSource" ref="dataSource" />

    </bean>

<!-- 声明式事务的配置 -->

    <tx:advice id="txAdvice" transaction-manager="transactionManager">

         <!-- 事务的定义 -->

         <tx:attributes>

            <!-- propagation称之为事务的传播性 -->

            <tx:method name="*" rollback-for="EXCEPTION" propagation="REQUIRED"/><!-- 所有的方法全部加入到事务中 -->

            <tx:method name="get*" propagation="NEVER"/><!-- 不执行事务操作 -->

            <tx:method name="set*" propagation="NEVER"/><!-- 不执行事务操作 -->

         </tx:attributes>

    </tx:advice>

    <!-- AOP编程实现 -->

<aop:config>

      <!-- 切入点的配置,哪些类或者哪些方法进入到切面中 -->

      <aop:pointcut expression="execution(* com.jinglin.hotelsup.service..*(..))" id="allMethods"/>

      <!-- 把切入点同事务整合在一起 -->

      <aop:advisor advice-ref="txAdvice" pointcut-ref="allMethods"/>

</aop:config>

<!-- 使用annotation定义事务,这样就可以通过注解去管理业务层的事务 -->

    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

3.将三层架构中的dao层(mapper接口)以及业务层加入到spring中。(开启包的扫描,就是直接将一个包里所有的类扫描到spring中),首先扫描mapper代理对象(就是dao层),然后扫描service层(里面会用到自动装配)

<!-- 通过spring的包的扫描的方式将这些包里的类扫描到spring的容器里 -->

<!-- 开启注解配置-->

    <context:annotation-config/>

    <!-- dao层的扫描,实际就是批量生成dao层的bean对象

     生成的规则:beanid名实际就是dao层类或接口的首字母小写

   比如,UserInfoMapper->userInfoMapper

      GoodsInfoMapper->goodsInfoMapper

-->

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

    <!-- 配置扫描的包名 -->

<property name="basePackage" value=http://www.mamicode.com/"com.jinglin.hotelsup.dao.imp"></property>

<property name="sqlSessionFactoryBeanName" value=http://www.mamicode.com/"sqlSessionFactory"></property>

</bean>

<!-- service层全部扫描到spring容器里 -->

<context:component-scan base-package="com.jinglin.hotelsup.service"/>

 

然后在service层里注解每个service类,然后调用dao层的对象的时候直接自动装配,代码如下:

@Service表示的是它是一个业务层的类,被扫描到spring中的

@Transactional

@Service

public class UserInfoService {

    //注入的dao层,自动装配

@Autowired  

private UserInfoMapper userInfoMapper;

 

    public List<UserInfo> getallusers(){

     return userInfoMapper.getlist();

    }

   

    public int adduser(UserInfo u){

     userInfoMapper.additem(u);

     return u.getUserid();

    }

   

    @Transactional(propagation=Propagation.NOT_SUPPORTED)

    public List<UserInfo> allusers(){

     return userInfoMapper.getlist();

    }

 

}

spring同mybatis整合的总结及配置