• MyBatisSpring SqlSessionFactoryBean



    SqlSessionFactoryBean 配置
    在基本的 MyBatis 中,session 工厂可以使用 SqlSessionFactoryBuilder 来创建。而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来替代。

    SqlSessionFactoryBean的定义

    public class SqlSessionFactoryBean implements FactoryBean<SqlSessionFactory>, InitializingBean, ApplicationListener<ApplicationEvent> {
     
    }

    能被Spring IoC容器管理的原因就是继承了FactoryBean这个接口了。

    当实现了这个接口的 Bean 在配置为被 Spring 接管时,存入IoC容器中的实例类型将会是实例化泛型的那个类型,从IoC容器中获取时也是实例化泛型的那个类型,这种情况下,Spring 将会在应用启动时为你创建 SqlSessionFactory 对象,然后将它以 SqlSessionFactory 为名来存储。当把这个bean注入到Spring中去了以后,IoC容器中的其他类型就可以拿到 SqlSession 实例了,就可以进行相关的SQL执行任务了。

     

        /*
        定义MyBatis的核心连接工厂bean,
        等同于<bean class="org.mybatis.spring.SqlSessionFactoryBean">
         参数使用自动装配的形式加载dataSource,
        为set注入提供数据源,dataSource来源于JdbcConfig中的配置
         */
        @Bean
        public SqlSessionFactoryBean getSqlSessionFactoryBean(
                @Autowired DataSource dataSource,
                @Autowired PageInterceptor pageIntercptor){
            SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
            //等同于<property name="dataSource" ref="dataSource"/>
            ssfb.setDataSource(dataSource);
            Interceptor[] plugins={pageIntercptor};
            ssfb.setPlugins(plugins);
            return ssfb;
        }
        <!--sqlSessionFactoryBean创建--> 
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
            <property name="dataSource" ref="dataSource-mysql" /> 
            <property name="typeAliasesPackage" value="com.du.wx.model" /> 
            <property name="mapperLocations" value="classpath:com/du/wx/resources/mapper/*.xml"/> 
        </bean> 
    
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
            <!-- joggle代表接口 --> 
            <property name="basePackage" value="com.du.wx.mapper.joggle" /> 
        </bean>

    根据这个类的层次结构找出我们感兴趣的两个接口,FactoryBean 和 InitializingBean:

    • InitializingBean:实现此接口的 bean 会在初始化时调用其 afterPropertiesSet 方法来进行bean的逻辑初始化。
    • FactoryBean:一旦某个bean实现此接口,那么通过 getBean 方法获取 bean 时其实是获取此类的 getObject() 返回的实例

    由于SqlSessionFactoryBean实现了FactoryBean接口,所以当通过 getBean 方法获取对应实例时,其实是获取该类的 getObject() 函数返回的实例,也就是获取初始化后的 sqlSessionFactory 属性

    @Override
    public SqlSessionFactory getObject() throws Exception {
        if (this.sqlSessionFactory == null) {
            afterPropertiesSet();
        }
    
        return this.sqlSessionFactory;
    }
    • MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
    • Spring 是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式)轻量级开源框架。
    • MyBatis-Spring 帮助你将 MyBatis 代码无缝地整合到 Spring 中。 使用这个类库中的类, Spring 将会加载必要的 MyBatis 工厂类和 session 类。 这个类库也提供一个简单的方式来注入 MyBatis 数据映射器和 SqlSession 到业务层的 bean 中。 而且它也会处理事务, 翻译 MyBatis 的异常到 Spring 的 DataAccessException 异常中。最终,它并 不会依赖于 MyBatis,Spring 或 MyBatis-Spring 来构建应用程序代码。

    REF

    https://blog.csdn.net/yu_kang/article/details/88929606

    https://blog.csdn.net/tales522/article/details/80993175

    http://www.mybatis.cn/archives/859.html

    https://www.cnblogs.com/question-sky/p/6602151.html

    https://www.jianshu.com/p/adf2486ba56e

  • 相关阅读:
    IE6/IE7下:inline-block不兼容的问题
    ie6、ie7下overflow失效
    display:inline、block、inline-block三者之间的区别
    分割线用CSS样式做出来的效果
    jQuery实现鼠标点击div外的地方div隐藏消失的效果
    IE6下面的浮动问题
    [zabbix]zabbix分区表操作步骤
    [转载]系统管理:update-alternatives
    zabbix调优PPT
    mysql修改密码
  • 原文地址:https://www.cnblogs.com/emanlee/p/15737227.html
Copyright © 2020-2023  润新知