在未整合spring之前,mybatis的使用离不开这一段代码:
可以发现这段代码的复用性很高,并且每执行一次方法mybatis的核心配置文件都会被加载创建一个resource对象,因此效率不高,所以这里使用spring来整合mybatis的开发步骤。
1. 整合思路
2. 将sqlMapConfig.xml转移至spring核心配置文件
<!-- 导入jdbc数据库配置文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- 配置mybatis要用到的sessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 由于之前导入了mybatis-spring,这里只需要用数据源连接池的数据源注入后即可
不用在mybatis核心配置文件中写了,也就是不用在里面写environments标签
这样剩下的需要配置的东西就比较少了-->
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:sqlMapperconfig.xml"/>
</bean>
<!-- 扫描mapper所在的包,为mapper创建实现类-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.dzy.dao"/>
</bean>
首先mybatis的核心配置文件中environments内容和mapper内容可以被spring核心配置文件取代,代码如上,这里的session由spring自动生成,实现层的代码为:
这里直接对mapper进行依赖注入,方法中就可以直接使用接口代理的方法
@Service("userservice")
public class userserviceImpl implements userService {
@Autowired
private userMapper mapper;
@Override
public void findAll() {
List<User> userList=mapper.findAll();
for(User user:userList){
System.out.println(user);
}
}
}
3. 声明式事务控制
<!-- 声明式事务控制-->
<!-- 平台事务管理器-->
<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 通知-->
<tx:advice transaction-manager="dataSourceTransactionManager" id="txAdvice">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!-- 织入-->
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.dzy.service.*.*(..))"/>
</aop:config>