读书:《深入浅出MyBatis技术原理与实战》

介绍

在不少项目中使用过MyBatis,但一直没机会深入了解过其相关知识.这次获知这本书之后,终于得以深入了解其运行原理.因原书并未附带相关随书源码.因此在看书时,非常不方便.本文后面会附上我看书时整理的源码一份(mybatis-spring 整合,及最后一章未整理),所有源码均可运行.我的环境是JDK1.8,Idea 2017.1,MySQL5.7,关于书籍信息如下:

  • 书名:深入浅出MyBatis技术原理与实战
  • 作 者:杨开振
  • ISBN:978-7-121-29594-2

mybatis logo

笔记

下面是一些笔记,供以后参考.

MyBatis基本构成:

SqlSessionFactoryBuilder(构造器):它会根据配置信息或者代码来生成SqlSessionFactory(工厂接口).
SqlSessionFactory:依靠工厂来生成SqlSession(会话).
SqlSession:是一个既可以发送SQL去执行并返回结果,也可以获取Mapper的接口.
SQL Mapper:它是MyBatis新设计的组件,它是由一个Java接口和XML文件(或注解)构成的,需要给出对应的SQL和映射规则.它负责发送SQL去执行,并返回结果.

MyBatis配置XML文件层次结构(顺序不能变)

配置示例(application.properties)

需要配合上面的文件使用.

maven如果不能读取xml或者properties配置文件?

首选配置properties文件方式进行配置.

MyBatis映射器主要元素

特殊字符串的替换和处理(#和&)

columns = “c1,c2,c3″ #{columns} 会直接显示”c1,c2,c3”,会对参数进行处理.

${columns} 不会处理参数,会直接显示.例如(c1,c2,c3)

需要注意SQL注入的问题.

常用工具类

二级缓存默认不开启. 开启需要在映射文件中(查询数据中),添加

即可开启二级缓存.

元素 作用 备注
if 判断语句 单条件分支判断
choose(when,otherwise) 相当于Java中的if else语句 多条件分支判断
trim(where,set) 辅助元素 用于处理一些SQL拼接问题
foreach 循环语句 在in语句等列举条件常用

映射器的组成

MappedStatement:它保存映射器的一个节点(select|insert|delete|update),包括许多我们配置的SQL,SQL的id,缓存信息,resultMap,parameterType,resultType,languageDriver等重要配置内容;

SqlSource:它是提供BoundSql对象的地方,它是MappedStatement的一个属性.

BoundSql:它是简历SQL和参数的地方.它有3个常用的属性:SQL,parameterObject,parameterMappings.

1.Executor是执行SQL的全过程,包括组装参数,组装结果集返回和执行SQL过程,都可以拦截;
2.StatementHandler是执行SQL的过程,我们可以重写执行SQL的过程;
3.ParameterHandler,拦截执行SQL的参数组装;
4.ResultSetHandler用于拦截执行结果的组装.

源码及使用

使用源码可遵循如下步骤:

  1. 配置JDK1.8环境
  2. 配置MySQL5.6
  3. 配置Maven或Gradle
  4. 配置IDEA,并将源码包中的mybatis.sql导入到数据库中
  5. over…

贴一个maven的配置(使用了阿里的maven仓库,速度杠杠的).

源码下载.mybatils 源码

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据