Mybatis(一)入门介绍

时间:2021-12-13 11:39:19

一、MyBatis的发展

MyBatis 是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到google code, 并且改名MyBatis。2013年迁移到Github。

MyBatis是一个持久层框架,它将jdbc的操作数据库进行封装,帮助开发者专注于sql本身,避开了注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc等繁琐的过程代码。

MyBatis 通过xml或者注解方式将要执行的各种statement(statement、preparedStatement、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

二、MyBatis和Hibernate相比的优点

先说Hibernate的优点:

1、Hibernate 对JDBC进行了封装,减少SQL硬编码;

2、避免了代码的映射规则,通过XML或注解避免了管理数据库连接;

3、使用HQL,支持方言配置,方便数据库移植;

4、在一个会话中不需要操作多个对象,只需要操作一个session(在spring下,都由spring来管理)。

然后Hibernate的缺点:

1、在存储过程这方面并不是太好;

2、对多表关联和复杂SQL操作不太友好,针对这方面,还需要自己写SQL;

3、虽然使用HQL语言查询,但是性能不高,在处理比较大的系统和数据时,需要优化SQL提高效率;

而MyBatis在一定程度上可以避免了Hibernate的缺点。MyBatis需要手动编写SQL语句和映射关系。

区别:

与hibernate相比, MyBatis不完全是一个ORM框架,MyBatis需要编写sql语句并且通过XML或者注解的方式配置运行的sql语句。并通过java对象和sql映射成可以执行的sql, 之后再将sql执行的结果映射成java对象。

MyBatis 比较易学,可编写原生sql,并且提高sql执行性能,适合对关系型数据模型不高的软件开发。但是若要实现多种数据库的软件则需要多个sql映射文件。

Hibernate 对象,映射强,数据库无关性好,与上面相反。

三、MyBatis 架构

1、 MyBatist框架架构图片

下图是MyBatist框架架构(自于MyBatis官方文档的图,the image is from MyBatis Official document)

Mybatis(一)入门介绍

(图片版权归mybatis 官方文档所有)

2、框架介绍

1)SqlMapConfig.xml 是Mybatis的全局配置文件,配置了mybatis的运行环境等信息。MapperN.xmls是sql的映射文件,文件中配置了操作数据库  的sql语句,需要通过SqlMapConfig.xml加载;

2)通过mybatis环境配置信息构造SqlSessionFactory(会话工厂);

3)再通过SqlSessionFactory创建sqlSession会话(需要通过sqlSession操作数据库 );

4)MyBatis 底层定义了Exectuor执行器接口操作数据库,Exectuor接口有两个实现,一个是基本执行器,一个是缓存执行器;

5)MappedStatement是Mybatis底层封装对象,包装了mybatis配置信息以及sql映射信息。mapper.xml文件中一个sql对应一个MappedStatement对象,sql的id即是MappedStatement的id。

6)MappedStatement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo, Executor通过MappedStatement 执行sql前将java对象映射到sql中,输入参数映射就是JDBC编程中对preparedStatement设置参数;

7) 输出结果映射过程相当于JDBC编程中对结果的解析处理过程。