版权声明:本文为博主原创文章,未经博主允许不得转载。 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; //...... }