1. 程式人生 > >mybatis與spring整合

mybatis與spring整合

fig bsp 切面 業務 開啟 per cep ret ever

1.Spring同mybatis的整合步驟?

DataSource(主要提供的數據源)

整合SqlSessionFactory(代表的是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" value="2000"/>

</bean>

<!-- 配置SqlSessionFactory -->

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

<property name="dataSource"

ref="dataSource"/>

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

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

</bean>

2.spring提供的aop對於業務層的事務實現(聲明式事務處理)。

transactionManager(表示jdbc的事務處理)

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();

}

}

mybatis與spring整合