首先Spring和Mybatis整合,需要将两个对象交给spring容器管理:SQLSessionFactoryBean和mapper代理
配置式
1.spring配置文件,相应的mybatis中只需要注册映射文件就好
<!--加载jdbc属性文件-->
<context:property-placeholder location="jdbc.properties"/>
<!--注册C3P0数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!--注册SQLSessionFactoryBean-->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="mybatis.xml"></property>
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--获取mapper代理对象 MapperScannerConfigurer-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
<property name="basePackage" value="com.bjsxt.mapper"></property>
</bean>
<!--注册Service-->
<bean id="fundServiceImpl" class="com.bjsxt.service.impl.FundServiceImpl">
<property name="accountaccountMapper" ref="accountMapper"></property>
<property name="fundMapper" ref="fundMapper"></property>
</bean>
<!--注册事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--注册事务通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--设置事务属性-->
<tx:attributes>
<!--连接点-->
<tx:method name="buyFund" isolation="DEFAULT" propagation="REQUIRED" rollback-for="FundException"/>
</tx:attributes>
</tx:advice>
<!--AOP配置-->
<aop:config>
<aop:pointcut id="fundPC" expression="execution(* *..service.*.buyFund(..))"></aop:pointcut>
<aop:advisor advice-ref="txAdvice" pointcut-ref="fundPC"></aop:advisor>
</aop:config>
注解式
spring配置文件
<!--加载jdbc属性文件-->
<context:property-placeholder location="jdbc.properties"/>
<!--注册C3P0数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!--注册SQLSessionFactoryBean-->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="mybatis.xml"></property>
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--获取mapper代理对象 MapperScannerConfigurer-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
<property name="basePackage" value="com.bjsxt.mapper"></property>
</bean>
<!--注册Service-->
<bean id="fundServiceImpl" class="com.bjsxt.service.impl.FundServiceImpl">
<property name="accountaccountMapper" ref="accountMapper"></property>
<property name="fundMapper" ref="fundMapper"></property>
</bean>
<!--注册事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--注册事物注解驱动-->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
mapper 接口中要注解不再使用mapper配置文件
public interface AccountMapper {
@Update("update account set balance=balance-#{balance} where aname=#{aname}")
//修改
void updateAccount(Account account);
}
业务层进行注解
@Service("fundServiceImpl")
public class FundServiceImpl implements FundService {
@Autowired
private AccountMapper accountaccountMapper;
@Autowired
private FundMapper fundMapper;
public AccountMapper getAccountaccountMapper() {
return accountaccountMapper;
}
public void setAccountaccountMapper(AccountMapper accountaccountMapper) {
this.accountaccountMapper = accountaccountMapper;
}
public FundMapper getFundMapper() {
return fundMapper;
}
public void setFundMapper(FundMapper fundMapper) {
this.fundMapper = fundMapper;
}
@Override
public void buyFund(Account account, Fund fund) throws Exception {
accountaccountMapper.updateAccount(account);
fundMapper.updateFund(fund);
}
}
OK了