Mybatis核心要点整理

1.Mybatis简述 

MyBatis 是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。

MyBatis避免了几乎所有的JDBC代码和手工设置参数以及抽取结果集。MyBatis用简单的XML或注解来配置和映射基本体,将接口和Java的POJO映射成数据库中的记录。 

2.对于JDBC哪些步骤可以进一步封装 

1)使用数据库连接池对连接进行管理。数据库连接的获取和关闭可以使用数据库连接池来解决资源浪费的问题。通过连接池就可以反复利用已经建立的连接去访问数据库了。减少连接的开启和关闭的时间。 一般常用的有JDBC连接池或JNDI数据库连接池。 

2) SQL语句统一存放到配置文件。将这些SQL语句统一集中放到配置文件或者数据库中(以key-value的格式存放)。然后通过SQL语句的key值去获取对应的SQL语句。 

3) SQL语句变量和传入参数的映射以及动态SQL 。通过引入<if>这样的标签,需要专门的sql解析器解析这样的判断结果是否为true来输出标签里面的sql片断。并通过不标识符区分开点位符变量和非点位符变量。使用#变量名,#表示点位符变量,使用$变量名$表示非点位符变量。 

4) 对数据库操作结果的映射和结果缓存 。对于结果可能需要做的处理有,将结果转换成一个javabean对象返回、一个map返回、一个list返回等,需要告诉sql处理器两点(1)、需要返回什么类型的对象(2)、需要返回的对象的数据结构怎么跟执行的结果映射。再考虑对sql执行结果的缓存来提升性能。缓存以key-value格式保存,sql语句和传入参数部分合起来可以作为数据缓存的key值。 

5)解决重复SQL语句问题 。将重复的代码抽离出来成为独立的一个类,然后在各个需要使用的地方进行引用。对于sql重复问题,可以采用,通过将sql片段模块化,将重复的sql片段独立成一个sql块,然后在各个sql语句中引用重复的sql块。 

3.mybaits的整体流程 

1)加载配置文件并初始化 。配置文件来源于两个地方,一处是配置文件,一处是java代码的注解,将sql的配置信息加载成为一个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。 

2)接收调用请求 。通过Mybatis提供的API,接收请求传入的SQL的ID和参数对象 ,再将请求传递给请求处理层进行处理。 

3)处理操作请求 。(A)根据SQL的ID查找对应的MappedStatement对象 (B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。 (C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。 (D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。 (E)释放连接资源。 

4)返回处理结果 。将最终的处理结果返回。 

4.mybatis三层功能架构

Mybatis核心要点整理

1)API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。 

2)数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。 

3)基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。 

5.mybatis具体执行流程图 

Mybatis核心要点整理

1)SqlSessionFactoryBuilder 。每一个mybatis的应用程序的入口是SqlSessionFactoryBuilder,它的作用是通过XML配置文件创建Configuration对象,然后通过build方法创建SqlSessionFactory对象,一般使用全局。

2)SqlSessionFactory 。主要功能是创建SqlSession对象,一般使用全局。SqlSessionFactory对象一个必要的属性是Configuration对象,用于保存Mybatis全局配置的一个配置对象。 

3)SqlSession 。主要功能是完成一次数据库的访问和结果的映射,由于不是线程安全,所以SqlSession对象的作用域需要限制方法内。SqlSession的默认实现类是DefaultSqlSession,它包含两个属性:Configuration和Executor。SqlSession通过Executor来完成对数据库的操作都是。应用程序通过SqlSession的getMapper()来获取Mapper对象,通过Mappper对象来使用Mybatis框架。

4)Executor。Executor对象在创建Configuration对象的时候创建,并存放在Configuration对象里。它的主要功能是调用StatementHandler访问数据库,并将查询结果存入缓存中。 

5)StatementHandler 。它是真正访问数据库的地方,并调用ResultSetHandler处理查询结果。 

6)ResultSetHandler 。它用于处理查询结果。 

6.MyBatis的优缺点 

1)优点

1.简单易学,易于使用 。mybatis本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件。易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。 

2.灵活。mybatis不会对应用程序或者数据库的现有设计强加任何影响。

3.解除sql与程序代码的耦合 。通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql写在xml里和代码的分离,便于统一管理和优化,提高了可维护性。 

4.提供映射标签,支持对象与数据库的orm字段关系映射 。

5.提供xml标签,支持编写动态sql。 

2)缺点: 

1.编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。 

2.SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。