1、mybatis是什么?
mybatis是一款用于持久层的、轻量级的半自动化ORM框架,封装了所有jdbc操作以及设置查询参数和获取结果集的操作,支持自定义sql、存储过程和高级映射。
持久层是什么意思呢,可以把层字去掉,持久,也就是”保持长久“的意思,他针对的是系统中数据存在的时限,而非其他。有一个基本问题大家应该知道,在内存中的数据是不持久的,如果计算机崩溃或者其他原因导致关机,数据就会丢失,但是磁盘上的数据是持久的,因此,用在持久层也就是这个框架是用来将内存中的数据写入到磁盘中的,再具体一点,就是写到数据库中。所以,总结一下,框架用于持久层,就是说这个框架是和数据库进行交互的,用于数据库中数据操作的框架。
轻量级框架的概念可以简单的理解为所用框架开发的程序启动时占用的资源少、对业务代码的侵入性不强、比较容易配置、使用和部署简单、独立部署即可使用无需依赖另外的框架,这种就是轻量级框架,相反的就是重量级。在互联网飞速发展和产品迭代更新速度如此之快的今天,轻量级的框架更容易被接受,这也是spring胜出,EJB退出的原因。
ORM,Object Relational Mapping, 直接翻译就是对象关系映射,我也没有更好的解释,看一下百科上是这样介绍的”用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生”。这里简单的可以这样理解,java中的数据类和数据库之间的类型系统不同,因此在使用java处理数据库时,需要进行对应的类型转化,而mybatis可以做这个事,可以将java中的类型一一映射到数据库的字段类型上,因此可以将其看作是一个ORM框架。那为什么又是半自动ORM框架呢?使用mybatis,需要手动配置pojo、sql和映射关系,用户可以自定义sql,这些sql是针对于处理数据库的,但是这些sql需要接受一些查询java类型的参数,或者是返回结果集封装到java类中,这些是需要配置的,因此mybatis是一个半自动ORM框架。说到底还是因为需要写sql,才能将数据库中的数据映射到java类中,而不是直接根据java类获取到对应数据库中数据。这里多说一下,hibernate是一个全自动的ORM框架,因为只需要提供pojo和映射关系即可,后期可以直接根据pojo获取到数据。
最后就是高级映射是什么,这里可以类比数据表之间的映射关系,也就是一对一、一对多、多对多。
2、Mybatis的优点
(1)基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解 除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。
(2)与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接。
(3)很好的与各种数据库兼容。
(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。
(4)能够与Spring很好的集成。
(5)提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。
3、Mybatis的缺点
(1)SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求。
(2)SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
4、Mybatis框架的适用场合
(1)MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案。
(2)对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择。