• spring与mybatis三种整合方法


    1.单独使用MyBatis

    单独使用MyBatis,不结合其他框架,主要步骤是:

    1.创建SqlSessionFactory对象

    创建方法是通过SqlSessionFactoryBuilder这个类从mybatis的XML配置文件,或者porperties,或者URL获取相关数据库的配置信息。

    2.从sqlSessionFactory获取SqlSession。

    3.使用SqlSession提供的API,对数据库进行增删改查,以及事务管理。

    1
    2
    3
    4
    5
    6
    7
    String resource = "org/mybatis/example/mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession session = sqlSessionFactory.openSession();
    session.insert("BlogMapper.selectBlog"101);
    session.commit();
    sesssion.close();

    2.结合Spring框架使用MyBatis

     MyBatis + Spring的使用方式,一般是在Spring的配置文件里,配置以下内容:

    1.数据源(DataSource)

    2.SqlSessionFactoryBean,实现FactoryBean接口,通过注入DataSource对象,以及MyBatis的相关配置信息,返回SQLSessionFactory对象。

    1
    2
    3
    4
    5
    6
    <jee:jndi-lookup id="dataSource" jndi-name="jdbc/mysql"></jee:jndi-lookup>
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>
        <property name="mapperLocations" value="classpath:mybatis/*/*.xml"></property>
    </bean>

    加入以上的配置信息就可以Dao类里,直接引用sqlSessionFactory这个对象,对数据库进行操作(跟1的代码一样)。

    如果Dao的代码写多了,这时候会发现,每次的数据库操作,步骤都是要先

    ①获取SqlSession对象->②调用数据库操作的方法->③提交事务->④关闭SqlSession

    其中①③④这三个步骤会一直环绕在每个Dao的方法里。

    这时候会这么想,能否提供这样一个功能,在调用方法之前自动获取SqlSession对象,在调用方法之后自动提交事务和关闭SqlSession对象。这样①③④这样重复的代码就可以剔除了,整个Dao类的代码也变得更加简洁。

    3.SqlSessionTemplate的应用

    上面提到的,在调用方法之前和调用方法之后,各执行一些操作。这种技术一下子就联想到就是AOP编程方式。

    AOP是Spring的第二个核心功能,所以自然它也提供了这样的是一个实现类,就是SqlSessionTemplate

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <jee:jndi-lookup id="dataSource" jndi-name="jdbc/mysql"></jee:jndi-lookup>
     
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>
        <property name="mapperLocations" value="classpath:mybatis/*/*.xml"></property>
    </bean>
         
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg ref="sqlSessionFactory" />
    </bean>

     引入SqlSessionTemplate这个类,在写Dao时,每个方法,在执行之前,自动获取SqlSession对象,执行之后,自动提交事务和关闭会话。

    1
    2
    3
    public Object save(String str, Object obj) throws Exception {
      return sqlSessionTemplate.insert(str, obj);
    }

    现在代码一下子变得更简洁了,只剩下数据操作的方法。

    4.SqlSessionTemplate原理解析思路

    为什么SqlSessionTemplate能够在每个方法,在执行之前,自动获取SqlSession对象,执行之后,自动提交事务和关闭会话。

    要知道这个原理,其实相当于要了解Spring AOP原理。

    要了解Spring AOP原理,就必须知道Java技术里,动态代理的原理。

    Java的动态代理主要是涉及到JDK里java.lang.reflect包下的InvocationHandler接口和Proxy类里创建代理对象的方法。

    SqlSessionTemplate的源码解析

    SqlSessionTemplate的构造方法里,创建了一个SqlSession的代理对象。

    在这个代理对象,每次SQLSession的方法被调用,都执行以下操作。

    上面代码涉及到的知识点比较多,要完全理解,需要掌握下面列出的几点。

    5.知识点归纳

    1.MyBatis中的SqlSessionFactory和SqlSession

    2.Spring中的SqlSessionFactoryBean和SqlSessionTemplate

    3.Spring AOP原理

    4.Java动态代理原理

    5.Java反射原理

  • 相关阅读:
    AJAX
    前端上传文件 后端PHP获取文件
    PHP基础语法
    JS错误记录
    JS学习笔记
    python利用xlrd读取excel文件始终报错原因
    安装xlwt和xlrd
    编程菜鸟的日记-Linux无处不在
    编程菜鸟的日记-《软件测试》Ron Patton著-读书笔记
    编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第6章编程练习9
  • 原文地址:https://www.cnblogs.com/ruiati/p/6010836.html
Copyright © 2020-2023  润新知