spring同mybatis整合的總結及配置
1.Spring同mybatis的整合步驟?
整合的代碼:
<bean id="dataSource" destroy-method="close" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/> <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:orcl" <property name="user" value="hotelsup"/> <property name="password" value="123"/> <property name="maxPoolSize" value="40"/> <property name="minPoolSize" value="1"/> <property name="initialPoolSize" value="1"/> <property name="maxIdleTime" value="60"/> <property name="checkoutTimeout" </bean> <!-- 配置SqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!-- 指的是當前的mybatis的配置文件 --> <property name="configLocation" value="classpath:mybatis-config.xml" </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對象 生成的規則:bean的id名實際就是dao層類或接口的首字母小寫 比如,UserInfoMapper->userInfoMapper GoodsInfoMapper->goodsInfoMapper --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 配置掃描的包名 --> <property name="basePackage" value="com.jinglin.hotelsup.dao.imp"></property> <property name="sqlSessionFactoryBeanName" value="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整合的總結及配置