首页 > 代码库 > mybatis与spring整合
mybatis与spring整合
1.Spring同mybatis的整合步骤?
|
|
整合的代码:
<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对象 生成的规则:bean的id名实际就是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(); }
} |
mybatis与spring整合