MyBatis概述
传统JDBC的劣势
- 代码烦琐。 (使用JDBC编程时,代码量较大,尤其是当数据表字段较多时,代码显得繁琐、累赘并且使开发人员的工作量增加。)
- 表关系维护复杂。(数据表之间存在各种关系,包括一对一、一对多、多对多、级联等。如果采用JDBC编程的方式维护数据表之间的关系,过程较为复杂并且容易出错)
- 硬编码。(当使用jdbc编程时,SQL语句都是硬编码到java程序中,如果改变SQL语句,那么需要重新编译java代码,不利于后期维护)
- 性能问题。(在批量处理数据时,jdbc编程存在效率低下的问题,此时,程序将向数据库发送大批量的同类SQL语句请求,浪费数据库资源,影响运行效率。)
由于JDBC存在的缺陷,企业中通常使用ORM框架来完成数据库的操作。
ORM的简介
ORM的全程时Object Relational Mapping,即对象-关系映射。
ORM是一种规范,它是将简单的java对象和数据库表记录进行映射,使数据库表中的记录和POJO一一对应。
MyBatis简介
MyBatis的前身是Apache组织的一个开源项目iBatis。
2010年,iBatis由Apache Software Foundation迁移到了 Google Code,并且改名为MyBatis。
2013年11月迁移到GitHub,目前MyBatis由GitHub维护。
MyBatis是一款优秀的ORM框架,它支持自定义SQL、存错过程以及高级映射。
Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,它使用XML文件或注解进行配置和映射,将接口和java的POJO映射成数据库中的记录。
MyBatis的功能架构
- API接口层:提供给外部使用的接口API,开发人员通过这些API来操纵数据库。
- 数据处理层:负责具体的参数映射、SQL解析、SQL执行和结果映射等。它主要的功能是根据调用的请求完成一次数据库操作。
- 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载、缓存处理等,Mybatis将这些公用的功能抽取出来作为最基础的组件,为上层的数据处理层提供支持。
MyBatis的工作流程
- Mybatis读取配置文件和映射文件。其中,配置文件设置了数据源、事务等信息;映射文件设置了SQL执行相关的信息。映射文件要引入配置文件中才能被执行。
- Mybatis根据配置信息和映射信息生成SqlSessionFactory对象,SqlSessionFactory对象的功能是创建MyBatis的核心类对象SqlSession。
- SqlSession中封装了操作数据库的所有方法,开发者一般通过调用SqlSession完成数据库操作,但实际上,SqlSession并没有直接操作数据库,它通过更底层的Executor执行其接口操作数据库。
- Executor执行器将要处理的SQL信息封装到一个MappedStatement对象中。