Spring源码:spring-mybatis重要类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhuqiuhui/article/details/83657734

配置一:

<bean id="defaultSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="defaultDataSource" />
    <property name="mapperLocations">
        <array>
            <value>classpath*:dal/mapper/**/*.xml</value>
            <value>classpath*:mapper/*.xml</value>
        </array>
    </property>
    <property name="configLocation" value="classpath:dal/youzan-ibatisCfg.xml" />
    <property name="typeAliasesPackage" value="com.youzan.ump.marketing.dal.*.dataobject"/>
</bean>

<bean id="pointDeductionMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="mapperInterface" value="com.mapper.pointdeduction.PointDeductionMapper"/>
    <property name="sqlSessionFactory" ref="defaultSqlSessionFactory"/>
</bean>

<bean id="pointDeductionRecordMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="mapperInterface" value="com.mapper.pointdeduction.PointDeductionRecordMapper"/>
    <property name="sqlSessionFactory" ref="defaultSqlSessionFactory"/>
</bean>

配置二:

<bean id="defaultSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="defaultDataSource" />
    <property name="mapperLocations">
        <array>
            <value>classpath*:dal/mapper/**/*.xml</value>
            <value>classpath*:mapper/*.xml</value>
        </array>
    </property>
    <property name="configLocation" value="classpath:dal/youzan-ibatisCfg.xml" />
    <property name="typeAliasesPackage" value="com.youzan.ump.marketing.dal.*.dataobject"/>
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.mapper" />
    <property name="sqlSessionFactoryBeanName" ref="defaultSqlSessionFactory" />
</bean>
  • SqlSessionFactoryBean结构

    public class SqlSessionFactoryBean implements FactoryBean<SqlSessionFactory>, InitializingBean, ApplicationListener<ApplicationEvent>{
        private Resource configLocation; // mybatis配置文件位置
        private Resource[] mapperLocations; // mapper文件位置
        private DataSource dataSource;      // 数据源
        private TransactionFactory transactionFactory;
        private Properties configurationProperties;
        private SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        private SqlSessionFactory sqlSessionFactory;
        private String environment = SqlSessionFactoryBean.class.getSimpleName();
        private boolean failFast;
        private Interceptor[] plugins;
        private TypeHandler<?>[] typeHandlers;
        private String typeHandlersPackage;
        private Class<?>[] typeAliases;
        private String typeAliasesPackage;
        private Class<?> typeAliasesSuperType;
        private DatabaseIdProvider databaseIdProvider;
        private ObjectFactory objectFactory;
        private ObjectWrapperFactory objectWrapperFactory;
        //.......
    }
    

    该类可以取代mybatis的配置,直接注入属性值,即你完全可以取消配置中的configLocation属性,而把其中的属性直接写在SqlSessionFactoryBean中

  • SqlSessionFactoryBuilder:用于构造SqlSessionFactory

  • SqlSessionFactory:创建SqlSession的工厂,默认实现是DefaultSqlSessionFactory

    SqlSessionFactory是MyBatis的关键对象,它是个单个数据库映射关系经过编译后的内存镜像.SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象类获得,而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例.每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心.同时SqlSessionFactory也是线程安全的,SqlSessionFactory一旦被创建,应该在应用执行期间都存在.在应用运行期间不要重复创建多次,建议使用单例模式

  • MapperFactoryBean:MapperFactoryBean的出现为了代替手工使用SqlSessionDaoSupport或SqlSessionTemplate编写数据访问对象(DAO)的代码,使用动态代理实现

    public class MapperFactoryBean<T> extends SqlSessionDaoSupport implements FactoryBean<T> {
      private Class<T> mapperInterface;
      // ......
    }
    
  • MapperScannerConfigurer:查找类路径下的映射器并自动将它们创建成MapperFactoryBean。

    public class MapperScannerConfigurer implements BeanDefinitionRegistryPostProcessor, InitializingBean, ApplicationContextAware, BeanNameAware {
    
    private String basePackage;
    
    private SqlSessionFactory sqlSessionFactory;
    
    private SqlSessionTemplate sqlSessionTemplate;
    
    private String sqlSessionFactoryBeanName;
    
    //......
    }
    

猜你喜欢

转载自blog.csdn.net/zhuqiuhui/article/details/83657734
今日推荐