Mybatis 系列 0:初恋Mybatis

学习 Mybatis 之前,我们可以通过比较之前使用 JDBC 操作持久层的代码,再次重温一下 JDBC 的噩梦。

首先回忆一下操作 JDBC 的步骤:

口诀:「贾琏欲执事」

贾:加载注册驱动

琏:获取连接对象

欲:创建语句对象

执:执行SQL语句

事:释放资源

测试用例:

JDBC 测试用例1
JDBC 测试用例2

好了,回顾了以上两个例子,使用 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 不全的问题。

JAVA 运行机制

tips:查看官方文档是学习一门新语言最有效的方法。

系列预告:Mybatis 系列 1:ORM 框架思想以及开发前准备

关注「阿泽学长」

我要看更多干货,关注「阿泽学长」。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,640评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,254评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,011评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,755评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,774评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,610评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,352评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,257评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,717评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,894评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,021评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,735评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,354评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,936评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,054评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,224评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,974评论 2 355

推荐阅读更多精彩内容