美文网首页
mybatis spring 集成demo

mybatis spring 集成demo

作者: 左洁 | 来源:发表于2019-08-28 16:44 被阅读0次

mybatis spring 集成demo

1.环境

  • jdk8
  • mybatis3.5.2
  • Spring 5.1.9.RELEASE
  • spring-jdbc 5.1.9.RELEASE

2.引入mybatis和spring包

  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.2</version>
  </dependency>
  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.2</version>
  </dependency>
  ……………………
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
  </dependency>

3.测试代码

public class MbatisSpringTest
{
    public static void main( String[] args )
    {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("application.xml");
        BlogMapper blogMapper = ctx.getBean(BlogMapper.class);
        blogMapper.selectBlog(1);
    }
}

4.spring xml配置文件

下面xml配置只是为了解读mybatis spring 源码,生产环境不会用下面配置


    <!-- spring jdbc 数据源配置-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName" value="com.mysql.jdbc.Driver" />

        <property name="url" value="jdbc:mysql://localhost:3306/test" />

        <property name="username" value="root" />

        <property name="password" value="123456" />
    </bean>

    <!-- mybatis  SqlSessionFactory配置-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <!-- 自动扫描路径下xml文件-->
<!--     <property name="mapperLocations" value="classpath*:mapper/*.xml" />-->

        <!-- 自动扫描路径下配置文件-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>

    <!-- mapper 配置-->
    <bean id="mpperFactoryBean" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="mapperInterface" value="com.zzm.dao.BlogMapper" />
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>

SqlSessionFactoryBean:创建SqlSessionFactory,配置SqlSessionFactoryBean需要DataSource,

DataSource可以使用任何数据源。

MapperFactoryBean:需要配置SqlSessionFactory 和接口,上面配置是访问数据库dao层,创建SqlSessionTemplate 来管理SqlSession

SqlSessionTemplate : 通过sqlSessionFactory获取SqlSession 生成sqlSessionProxy, 上面例子blogMapper.selectBlog(1)中,真正执行sqlSessionProxy 调用org.mybatis.spring.SqlSessionTemplate.SqlSessionInterceptor 方法,调用org.apache.ibatis.session.defaults.DefaultSqlSession中方法

  PersistenceExceptionTranslator exceptionTranslator) {

    notNull(sqlSessionFactory, "Property 'sqlSessionFactory' is required");
    notNull(executorType, "Property 'executorType' is required");

    this.sqlSessionFactory = sqlSessionFactory;
    this.executorType = executorType;
    this.exceptionTranslator = exceptionTranslator;
    this.sqlSessionProxy = (SqlSession) newProxyInstance(SqlSessionFactory.class.getClassLoader(),
        new Class[] { SqlSession.class }, new SqlSessionInterceptor());
  }

5.SqlSessionFactoryBeanMapperFactoryBean初始化和执行流程图

5.1.MapperFactoryBean初始化

mapperFactoryBean初始化.jpg

5.2.SqlSessionFactoryBean初始化

mapperFactoryBean初始化.jpg

5.3.mapper执行流程

mybatis-spring执行流程图.jpg

参考链接

源码地址

相关文章

网友评论

      本文标题:mybatis spring 集成demo

      本文链接:https://www.haomeiwen.com/subject/lfjmectx.html