学习 Mybatis 之前,我们可以通过比较之前使用 JDBC 操作持久层的代码,再次重温一下 JDBC 的噩梦。
首先回忆一下操作 JDBC 的步骤:
口诀:「贾琏欲执事」
贾:加载注册驱动
琏:获取连接对象
欲:创建语句对象
执:执行SQL语句
事:释放资源
测试用例:
好了,回顾了以上两个例子,使用 JDBC 来操作数据的代码是不是很噩梦?
代码不仅又臭又长,而且不易维护,又有 SQL 注入的风险,每次操作都新创建一个 Connection 对象,用完就关闭,而且创建 Connection 的成本非常大(解决方案:使用数据库连接池 DataSource),加上针对不同的表查询还要写不一样的结果集处理器,等等各种问题。。。
如果每次的 CURD 都要这样写,那简直就是 CRUD copy_boy 了。
那既然使用 JDBC 这么难受,能不能不要它了?
哈哈,不能。原因是,在 Java 中,数据库存取技术只能通过使用 JDBC 访问数据库。
如果没有 JDBC,会带来什么问题呢?
0:我们访问数据库操作就没有规范;
1:因为数据库厂商是不一样的,不同的数据库厂商就会执行不同的访问 DataBase 规则;
2:比如我今天在 A 公司苦逼地写着代码,咱们大 A 公司使用的是 MySQL,好不容易学完了如何使用 MySQL 去访问数据库,却遇上了今年的裁员潮。。。历经千辛万苦,关灯吃面过后,我来到了 B 公司,B 公司财大气粗,使用的是 Oracle,作为小白的我,又得重新学习访问数据库的方法,这回是 Oracle 的,下回去到 2B 公司,如果 2B 公司使用的是 IBM 的 DB2,那简直得吐血。。
造成上述问题的根本原因就是各大数据厂商没有统一的访问数据库规则。
这时,SUN 公司站出来,说:我来统一指定所有数据库的访问规则,你们各大数据库厂商必须 follow,否则不支持你们的数据库服务器。
有了规范之后,针对不同的数据库服务器,就只需要一套技术即可。
这个规范称之为 JDBC。
JDBC(Java DataBase Connectivity)是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问,它由一组用 Java 语言编写的类和接口组成。JDBC 提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。(百度百科)
既然我们不能抛弃 JDBC,那有什么方法优化其缺点,成为 CEO,迎娶白富美,走上人生巅峰呢?
盒盒盒。。。盒盒。。想多了。。
还真有,那就是站在巨人的肩膀上,使用他们已经写好的框架,如:Hibernate、iBatis 和 Mybatis 等(底层都为 JDBC)。
Mybatis 就是我们要重点学习的持久层框架了。
那,Mybatis 是什么呢?
Mybatis 是支持普通 SQL 查询,存储过程和高级映射的持久层框架,严格上说应该是一个 SQL 映射框架。
几乎所有的 JDBC 代码和参数的手工设置以及结果集的处理器都可以交给 Mybatis 完成,而这只需要简单的 XML 或者注解就可以完成,其前身是 iBatis。
Mybatis 核心为动态代理 MapperProxy。
核心组件有:
SqlSessionFactoryBuilder(构建器):根据配置信息或 Java 代码来构建 SqlSessionFactory 对象,作用:创建SqlSessionFactory对象。
SqlSessionFactory(会话工厂):好比是 DataSource,线程安全的,在应用运行期间不用重复创建多次,建议使用单例模式,作用:创建 SqlSession 对象。
SqlSession(会话):好比是 Connection,线程不安全的,每次使用开启新的 SqlSession 对象,使用完正常关闭,默认使用 DefaultSqlSession。提供操作数据库的增删改查方法,可以调用操作方法,也可以操作 Mapper 组件。
Executor(执行器):SqlSession 本身不能直接操作数据库,需要 Executor 来完成,该接口有两个实现:缓存执行器(缺省)、基本执行器。
MapperStatement:映射语句封装执行语句时的信息如 SQL、输入参数、输出结果。
那,什么是框架呢?
软件框架(software framework),通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。
简而言之,框架就是制定一套规范或者规则(思想),大家(程序员)在该规范或者规则下工作。或者说使用别人搭好的舞台来做编剧和表演。
其实说白了,框架就是一系列 jar 包,就是抄大神的作业,直接拿他们已经封装好的类和接口过来用就好了。
在 Java 中,我们使用框架或者是别人已经写好的类的话,一般是直接引入 jar 包,就相当于是我写好了 Java 源文件,经过编译之后生成的一系列 class 字节码文件,这样也解决了到处 copy,有时还 copy 不全的问题。
tips:查看官方文档是学习一门新语言最有效的方法。
系列预告:Mybatis 系列 1:ORM 框架思想以及开发前准备
我要看更多干货,关注「阿泽学长」。