您可以创建SQLSessionFactory。DataSource是其自己数据源的BEAN注释,可以帮助我们注册MyBatis Mapper类作为BEAN,以便我们可以在使用的位置使用它。
mybatis-spring可以帮助我们简化工作,并带来价值
SQLSessionFactory是通过SQLSessionFactoryBean#buildsqlsessionFactory构建的。时间是SQLSessionFactoryBean.AverPropertiest.sqlsessionFactory具有大量可配置的项目,最终转换为SQLSessionFactory(配置)的构造参数
使用mybatis-spring,它将扫描特定的映射类(@mapperscan注释控制,可以注册任何注释的标记接口,还可以配置父判决的接口),然后将其注册为beanfactory作为beanfactory.BeanFactory。豆子依赖。
为了实现这种扫描机制,您需要扫描映射器的beanpostprocessor。在此处理器中,由Mapperscan配置配置的包装要求的类(接口)确定是否存在@mapper Annotation.beanfactory.getBean时,请致电mapperfactorybean.getObject。实现配置是真的。
您为什么要扫描注册的映射器?从Mapperscan类中,可以看到上面有@Import注释,而导入Mapperscannerregistrar
Spring的@Import注释通常用于引用其他配置,您还可以引用ImportSelector和ImportBeanDefinItinInitIntistrar intermination或其他组件类。
简而言之,宣布MaperScannerRegistraar bean。LET来看一下MappersCannerRegistrar的实现,MmappersCannerRegistrat实现了ImportBeanDefinitionIonistrar和ResourceceloAdraware界面。
ImportBeanDefinitionInotistrar接口用于处理@Configuration类时创建BEAN定义级别BEAN。
看一下MappersCannerRegistrar.RegisterBeanDefinitions的实现,创建了BeanDefinition。Bean是Mapperscannerconfigurer。它配备了MappersCannerConfigurer所需的属性配置(配置源自@Mapperscan注释),例如AnnotationClass,FactoryBean等。
它等同于在beanfactory中注册mapperscannerconfigurer bean.mapperscannerconfigurer bean beandefinitionregistrypostprocessor,InitializeBean,applicationContextaware,beannameaware和其他接口
mapperscannerconfigurer在后期ProcessBeanDefinitionItinitinitinitinitus中创建一个类PathMappersCanner,并称扫描方法。PostProcessBeanDefinientionRegorials将在ApplicationContext.refresh阶段,在BeanFactorepsext.refresh阶段,在BeanFactoryPostorpostprocess,RegisterContext.refresh阶段。
Doscan方法将扫描当前类路径下的所有类。根据@Annotation的要求,包装要求被滤除,并构建了BeanDefinitionholder。
ProcessBeanDefinitions实施
BeanClass是MapperFactoryBean,由mapperfactorybean.getObject创建的Bean生成。
MapperFactoryBean继承DaoSupport,并在此时注册以SQLSessionFactory的配置中注册时,将调用checkdaoconfig()。
Mybatis中的默认SQLSession不支持多线程用法,因为内部连接不支持多线程用法。为什么春季GetSeqlSession返回的实例?以下SQLSessionTemplate将解释SQLSessionSessionSession。
SQLSessionTemparte是由Spring管理的SQLSession,由Mybatis Spring提供的线程安全地管理,并保证SQLSession和Spring Transactions与SQLSessionTemplate相关联。从SQLSessionTemplate的实现,我们可以看到SQLSession的请求到SQLSessions的请求得到了SQLSessionsessionproxyproxy的转发。场地。从名称可以看出Java接口代理代理模式。
代理在SQLSessionInterceptor中实现。代理收到请求后,将首先获得当前的SQLSession。如果当前正在交易中,请在Spring的线程中使用SQLSession。