MyBatis并不是真正的ORM框架,只是一个半自动的SQL映射框架,MyBatis提供的功能不如ORM框架强大(毕竟只是半自动的),但是拥有更多的灵活性:
- MyBatis需要开发者自己编写SQL语句,因此可以充分自由地执行SQL优化;
- MyBatis需要开发者自己定义ResultSet与对象之间的映射关系,因此可以简单的避免循环使用的问题。
1. ORM简介
ORM,全称是Object/Relation Mapping,中文译为对象/关系映射。可以将ORM理解为一种规范,它概述了这类框架的基本特征:完成面向对象的编程语言到关系数据库的映射,即:当ORM完成映射后,结合面向对象的程序设计语言的简易使用以及关系数据库的技术优势,作为应用程序和关系数据库之间的桥梁。
ORM框架是面向对象的程序设计语言与关系数据库发展到不同步时的中间解决方法。随着面向对象数据库的发展,会逐渐替换关系型数据库,ORM工具也会自动消亡。
采用ORM框架后,应用程序不会直接访问底层数据库,而是以面向对象的方式来操作持久化对象(例如:创建、删除、更新等),ORM框架则将这些面向对象操作转为SQL操作。
2. ORM映射方式
ORM基本映射(持久化类和关系表)有如下几种映射关系。
- 数据表映射类:持久化类被映射到一张关系表,应用程序对持久化类的创建实例、修改属性、删除实例等操作,ORM框架会自动转为对关系表对应的CURD操作;
- 数据表的行映射对象(即实例) :持久化类生成的实例会对应关系表中的一行记录。当应用程序对持久化类实例修改时,ORM框架会自动转为对关系表中特定行的操作;
- 数据表的列映射对象的属性:当修改持久化类实例的某个属性时,ORM框架会自动转为对关系表中的指定行、指定列的操作。
3. MyBatis与ORM的区别
严格的讲,MyBatis并不是真正的ORM框架,只是一个ResultSet的映射框架。MyBatis并不会将表映射到类,它没有“持久化类”的概念。
3.1 MyBatis的映射关系
MyBatis执行select查询才会返回ResultSet,此时才需要将ResultSet映射为Java对象,才需要执行如下的映射关系;如果使用MyBatis执行insert、update和delete语句,则大致等同于使用PreparedStatement执行insert、update或者delete语句。
-
MyBatis先使用JDBC(默认使用PreparedStatement)执行查询,查询结果通常会返回一个RestultSet。ResultSet相当于一个包含多行、多列的数据包,每列都会有一个列名。
-
MyBatis会将ResultSet的每一行转为对应的Java对象,这才是MyBatis真正起作用的地方。
-
开发者需要指定resultType或者resultMap属性来指定MyBatis将ResultSet的每一行转为哪个Java对象;
-
接下来,MyBatis通过如下方式将ResultSet各列的值转为Java对象的属性的值:
- 列表与属性相同
- 显示指定:MyBatis提供了result元素(或
@Result
注解)来指定列名与对象属性之间的关系
-