SSM框架系列之Mybatis 超详解

前言:由于工作需要,特别总结了一下SSM框架,也希望可以帮助大家。SSM框架系列我总共会写11篇文章,其中关于Spring、SpringMVC和Mybatis的基础知识的总结三篇;还有关于Spring、SpringMVC和Mybatis常见面试题的总结各分三小篇,最后还有一篇SSM框架的面试题汇总。同时希望这个系列的文章可以帮助到大家。

一、Mybatis

1.1 概念

MyBatis 是一个持久层框架,实现了对JDBC操作的封装,主要用于简化JDBC操作中的一些相对繁琐的步骤。例如参数的映射,结果集的映射等。可以简单快速地连接和操作数据库,同时把操作数据库的结果集封装为Java对象返回。

1.2 Mybatis优点

Mybatis的优点:
(1)Mybatis对JDBC进行封装,在实际开发中不用花费时间和精力去处理对数据库连接等的处理;
(2)Mybatis自身支持连接池,也可以配置其他的连接池,如c3p0、druid,提高了程序的效率;
(3)Mybatis是将SQL配置在mapper.xml文件中,当需求发生变更时只修改xml配置文件就可以了,类不需要重新编译。
(4)执行SQL后返回的ResultSet结果对象,Mybatis会帮我们处理,转换成Java对象,方便我们对结果的处理。

1.3Mybatis架构

SSM框架系列之Mybatis 超详解_第1张图片
(1)sqlMapConfig.xml是Mybatis的核心配置文件,通过其中的配置可以生成SqlSessionFactory,也就是 SqlSession工厂;
(2)基于SqlSessionFactory可以生成SqlSession对象;
(3)SqlSession是一个既可以发送SQL去执行,并返回结果,类似于JDBC中的Connection对象,也是Mybatis中至关重要的一个对象;
(4)Executor是SqlSession底层的对象,用于执行SQL语句;
(5)MapperStatement对象也是SqlSession底层的对象,用于接收输入映射(SQL语句中的参数),以及做输出映射(即将SQL查询的结果映射成相应的结果)。

1.4 底层原理

工作原理解析:
Mybatis应用程序通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件(也可以用Java文件配置(注解)的方式,需要添加@Configuration)中构建出SqlSessionFactory(SqlSessionFactory是线程安全的);

然后,SqlSessionFactory的实例直接开启一个SqlSession,再通过SqlSession实例获得Mapper对象并运行Mapper映射的SQL语句,完成对数据库的CRUD和事务提交,之后关闭SqlSession。

说明:SqlSession是单线程对象,因为它是非线程安全的,是持久化操作的独享对象,类似jdbc中的Connection,底层就封装了jdbc连接。
SSM框架系列之Mybatis 超详解_第2张图片详细流程如下:
1.加载mybatis全局配置文件(数据源、mapper映射文件… …),解析配置文件,MyBatis基于XML配置文件生成Configuration和MappedStatement(包括了参数映射配置、动态SQL语句、结果映射配置),其对应着