spring 整合 mybatis


springmybatis的结合确定不会陌生,可是回想起来mybatis的使用与原理彷佛有些模糊了,故从新搭建操做理一下思路。java


使用的版本:

  • mybatis-spring-2.0.3
  • mybatis-3.4.5
  • spring-5.0.2
  • java-8
虽然没有按着官方文档上的来,可是没有发现任何的问题,有问题望指正。
image.png

mybatis 部分

全局配置文件

mybatis-config.xml 使用mybatis最基本的全局配置,单个使用mybatis时须要配置最基本的数据源(DataSource)、事务管理器(TransactionManager)和映射器(mapper),再在本身的代码中建立SqlSessionFactoryBuilder构建SqlSessionFactory,再获取session执行自定义映射文件中包含的sql方法spring

可是在spring-mybatis的整合时,要配置的不多,最简单的配置一个实体类包名便可,其他内容能够在spring部分配置。sql

mapper接口与映射文件

interface xxxMapper 就是单纯的包含一组有关xxx实体类的相关CRUD方法。数据库

xxxMapper.xml 是针对各自的实体类进行单独的sql语句配置,其中最关键的当属namespace标签,由于靠它来找到须要执行的sql。其中接口的全限名,就是映射文件中的namespace的值;接口的方法名,就是映射文件中MappedStatement的id值(在Mybatis中,每个<select>、<insert>、<update>、<delete>标签,都会被解析为一个MappedStatement对象);接口方法内的参数,就是传递给sql的参数。session

Mapper接口是没有实现类的,当调用接口方法时,接口全限名+Mapper接口里的方法,是不能重载的,由于是全限名+方法名方法名拼接字符串做为key值,可惟必定位一个MappedStatement,举例:com.mybatis.mapper.UserMapper.selectUser,能够惟一找到namespace为com.mybatis.mapper.UserMapper下面id为selectUser的MappedStatement。mybatis

Mapper接口的工做原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Mapper接口生成代理proxy对象,代理对象proxy会拦截接口方法,转而执行MappedStatement所表明的sql,而后将sql执行结果返回。app

Mapper接口里的方法,是不能重载的,由于是全限名+方法名的保存和寻找策略。

spring 部分

mybatis其他配置
  1. jdbc.properties: 提供了 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer类,其中locations属性可用于加载该文件中key-value做该xml中变量使用。如: ${username}
  2. c3p0链接池: 配置com.mchange.v2.c3p0.ComboPooledDataSource 数据库链接bean
  3. SqlSessionFactory: 在spring中配置须要org.mybatis.spring.SqlSessionFactoryBean bean,做用同mybatis中sqlSessionFactory,用做建立sqlsession,该bean中需配置三个属性: dataSource(引用上面配置的链接池)、configLocation(mybatis主配置文件类路径)、mapperLocations(映射文件对应的包路径)
  4. mapper接口扫描:有多种配置方法,使用bean org.mybatis.spring.mapper.MapperScannerConfigurer下属性basePackage配置便可
  5. 配置spring事务管理器: org.springframework.jdbc.datasource.DataSourceTransactionManager


温故而知新,写个文章更加新,在路上。ui

相关文章
相关标签/搜索