*文中代码字体版权说明
第1章
MyBatis 3核心技术之必备技能
本章目标:
了解MyBatis核心对象的生命周期
使用SqlSession对象或Mapper接口操作数据库
MyBatis结合ThreadLocal类进行CURD的封装
手动搭建开发环境
1.1
什么是框架
MyBatis是一个操作数据库的框架,那什么是框架?框架就是软件功能的半成品,框架提供了一个软件项目中通用的功能,将大多数常见的功能进行封装,无须自己重复开发,框架提高了开发及运行效率。在软件公司中,大多数情况是使用框架开发软件项目。
1.2
什么是对象关系映射
MyBatis是一个基于“ORM”的框架,ORM的全称是对象关系映射(Object Relational Mapping)。
对象(Object)就是Java中的对象,关系(Relational)就是数据库中的数据表,基于“ORM”的框架是把数据在对象和关系之间进行双向转换。
ORM的细节可以从3个方面来介绍。
(1)1个类对应1个表。
(2)1个类的对象对应表中的1行。
(3)1个类的对象中的属性对应1个表中的列。
ORM映射关系如图1-1所示。
MyBatis框架可以将Java类中的数据转化成数据表中的记录,或者将数据表中的记录封装到Java类中,过程如图1-2所示。
▲图1-1 ORM映射关系
图1-2 ORM框架映射的主流程
从图1-2的过程来看,程序员不再直接使用JDBC对象访问数据库,而是以面向对象的方式来使用实体类,对实体类进行的增加、删除、更新和查询操作都会由ORM框架转化成对数据库的增加、删除、更新和查询操作。
ORM框架内部的核心技术的原理其实就是JDBC和反射,这个技术是由ORM框架,也就是MyBatis来进行封装的。
1.3
MyBatis的优势
一个事物一定要有优势才不会被淘汰,软件技术也是如此。
MyBatis是现阶段操作数据库的主流框架,此框架的主要作用就是更加便捷地操作数据库。它具有很多优势,和程序员密切相关的优势主要体现在如下7个方面。
(1)ROW行与Entity实体类双向转换:可以将数据表中的ROW行与Entity实体类进行互相转换,比如将ResultSet对象返回的数据自动封装到Entity实体类或List中,或将Entity实体类中的数据转换成数据表中新的一行ROW。
(2)SQL语句与Java文件分离:可以把SQL语句写到XML文件中,目的是将SQL语句与Java文件进行分离,有利于代码的后期维护,也可使代码的分层更加明确。
(3)允许对SQL语句进行自定义优化:因为MyBatis框架是使用SQL语句对数据库进行操作的,所以可以单独地对SQL语句进行优化,以提高操作效率。而Hibernate框架却做不到这一点,所以MyBatis相比Hibernate框架就具有很大的优势,这也是现阶段大部分软件公司逐步用MyBatis替换掉Hibernate框架的主要原因。
(4)减化DAO层代码:使用传统的JDBC开发方式时,需要写上必要的DAO层代码以对数据库进行操作,但这样的代码写法在软件开发的过程中非常不便,因为多个DAO类中的大部分JDBC代码是冗余的,所以MyBatis解决了这个问题。使用MyBatis做查询时可以自动将数据表中的数据记录封装到实体类或Map中,再将它们放入List进行返回。这么常见而且有利于提高开发效率的功能MyBatis都可以自由方便地处理,不需要程序员写底层的实现代码,MyBatis就可以完全进行封装。从此观点来看,使用MyBatis框架去开发软件非常方便、快捷,省略了大量冗余的JDBC代码,MyBatis把常用的JDBC操作都进行了封装,进而提高开发效率,MyBatis框架很有使用上的必要性。