mybaits整合的两种方式

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进行扫描的时候直接扫描我自定义的那个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值