xml形式整合spring和mybaits
1.sqlSessionFactory的配置
1.xml文件的路径
2.dataSource (mybaits要查询数据库,所以dataSource是必须要的,用于连接数据库的配置)
<!-- sqlSessionFactory 1.spring-mybaits整合-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 加载 MyBatis 的配置文件 -->
<!--<property name="configLocation" value="SqlMapConfig.xml"/>-->
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
<!-- 数据源 -->
<property name="dataSource" ref="dataSource"/>
</bean>
2.MapperScannerConfigurer的配置
我们mapper接口的路径
<!-- Mapper 扫描器 2.spring-mybaits整合-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 扫描 cn.wmyskxz.mapper 包下的组件 -->
<property name="basePackage" value="com.tx.mapper"/>
</bean>
注解的方式
1.SqlsessionFactory的配置 (跟上面的xml一致,需要以下两个配置),扫描配置信息
1.xml文件的路径
2.dataSource
/**
* 注意:这里是spring-mybaits整合里面的xm文件配置信息
* 1.配置数据源
* 2.扫描xml文件并解析
* @param dataSource
* @return
* @throws Exception
*/
@Bean // 带参数的bean ,有参数的bean方法。 spring会从ioc中找对应的bean注入,如果ico中没有会报错
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
//这里配置xml扫描文件的信息
sessionFactoryBean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml")); //mybatis的xml文件路径
return sessionFactoryBean;
}
2.配置路径和sqlSessionFactory
进入注解会发现 底层也向spring注册了MapperScannerConfigurer 类
@MapperScan(basePackages ="com.transcaltion.dao",sqlSessionFactoryRef="sqlSessionFactory")
补充:
进入到@MapperScan注解
进入MapperScannerRegistrar类该类 实现
ImportBeanDefinitionRegistrar接口 所以会调用 registerBeanDefinitions方法 (Bean工厂的后置处理器)
该方法里面就是把
MapperScannerConfigurer 类注册到我们的Bean定义信息里面,这个类就是上面我们xml里面配置的类
注意!!!!!!!!!!!!!!!!!如果是高一点的版本,里面的实现就不是这样的了
分析:
了解了上面两种方式对于之后看源码和springboot自动装配之mybaits会很有很好的作用
后续我会更新mybaits-autoconfiguration
如果我们也要定义一个自动装配的类针对于mybaits:
1.首先肯定是要DataSource数据源的配置信息
2.SqlsessionFactory
3.MapperScan的扫描(这个直接写在启动类)
所以要定义mybaits的自动装配的话就需要前两个
自定义一个MybaitsAutoConfig类
第一步:
1.在我们的文件目录下面创建MATA-INF/spring.factories
2.配置自动扫描的类路径
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.example.demospringtomcat.MybaitsAutoConfig
第二部:
创建我们的自动扫描类
MybaitsAutoConfig.java 里面的内容如下:
1.dataSource的注入
@Bean
public DriverManagerDataSource dataSource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mysql?characterEncoding=UTF-8&serverTimezone=UTC ");
dataSource.setUsername("root");
dataSource.setPassword("root");
return dataSource;
}
2.SqlSessionFactory
@Bean // 带参数的bean ,有参数的bean方法。 spring会从ioc中找对应的bean注入,如果ico中没有会报错
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
//这里配置xml扫描文件的信息
sessionFactoryBean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml")); //mybatis的xml文件路径
return sessionFactoryBean;
}
3.sqlSessionTemplate(有一期我讲整合的源码的时候有说,这个是getMapper的时候要用的sqlSession,所以这个也需要引入)
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory){
SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
return sqlSessionTemplate;
}
这三个写进入我们的 MybaitsAutoConfig里面,我们的自动扫描也就完成了!
mapper文件和xml文件
好了,最后我们来试试:
成功调用!
为了偷懒,我把mybaits-spring-boot-starter.jar里面的自动装配的依赖注释了,让spring进行扫描的时候直接扫描我自定义的那个