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

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

口诀:「贾琏欲执事」

贾:加载注册驱动

琏:获取连接对象

欲:创建语句对象

执:执行SQL语句

事:释放资源

测试用例:

测试用例1
测试用例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 框架思想以及开发前准备

关注「阿泽学长」

mybatis连接oracle_Mybatis 系列 0:初恋Mybatis相关推荐

  1. Mybatis连接池介绍与分类 Mybatis使用POOLED UNPOOLED配置连接池的原理分析

    一.连接池 1.概念:其实就是一个容器(集合),存放数据库连接的容器. 当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象 ...

  2. Mybatis 系列 0:初恋Mybatis

    Mybatis 系列 0:初恋Mybatis 学习 Mybatis 之前,我们可以通过比较之前使用 JDBC 操作持久层的代码,再次重温一下 JDBC 的噩梦. 首先回忆一下操作 JDBC 的步骤: ...

  3. Destoon数据库配置文件在哪_Mybatis 系列 2:Mybatis 的两种配置文件

    Mybatis 的配置文件,有两种: 一.Mybatis 全局配置文件(主配置文件): 起名:不固定,但一般起名要见名知意 --> mybatis-config.xml 路径:classpath ...

  4. 手撸Spring系列13:MyBatis(实战篇)

    说在前头: 笔者本人为大三在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,发布的文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正. ...

  5. mybatis 源码系列(七) Java基础之数据库事务隔离级别

    更多mybatis 源码系列文章可关注我的博客,点击前往 正确设置数据库的事务访问级别,有助于我们的应用程序达到预期的效果 在mybatis中,提供了事务隔离级别的枚举类:org.apache.iba ...

  6. mybatis连接mysql数据库连接池_对于数据库连接池的一些思考和MyBatis的集成与使用...

    Java应用要连接数据库需要先通过jdbc与数据库之间产生connection,然后通过sql语句产生statment,再执行这个statment查询的到ResultSet返回给应用,应用解析Resu ...

  7. mysql8.0用mybatis哪个版本_SpringBoot整合MyBatis与MySql8.0

    一.前言 之前已经有一篇文章讨论过SpringBoot整合MyBatis,因而此篇不在重复累赘,本文主要是最新版的SpringBoot2.0与MyBatis.最新MySQL8.0整合过程中遇到的问题进 ...

  8. SpringBoot2.0应用(五):SpringBoot2.0整合MyBatis

    如何整合MyBatis 1.pom依赖 <dependency><groupId>org.mybatis.spring.boot</groupId><arti ...

  9. myBatis连接MySQL报错误:No operations allowed after conn

    为什么80%的码农都做不了架构师?>>>    myBatis连接MySQL报错误:No operations allowed after connection closed.Con ...

最新文章

  1. pyspark minHash LSH 查找相似度
  2. tomcat使用redis存储共享session
  3. 认证服务器的搭建_SpringCloud搭建的认证中心和资源服务器的微服务项目源码分享...
  4. 15 - java 继承
  5. 2018最火机器学习项目盘点—CV项目领冠榜单
  6. 基于JavaScript实现放大镜效果
  7. 【Mac】mac安装go
  8. VC ado连接数据库
  9. 从 XML 到 XPath
  10. zookeeper安装和基本操作
  11. 2020.10 小米赛第一场 A题
  12. CRIO脱机计算机工作,LabVIEW和cRIO入门
  13. php运行日志在哪里看,thinkphp错误日志在哪
  14. 阿里云ACE认证学习知识点梳理
  15. 文件处理技巧,如何快速复制并覆盖已存在的文件
  16. 【算法】生成n个互异随机数的初步算法
  17. 重读《触龙说赵太后》
  18. 产品经理学习手册(一)产品经理:挖掘发现用户需求、满足用户需求;让世界变得更美好
  19. python美观代码_为什么Python 代码要写得美观而明确
  20. python3做出倒计时效果

热门文章

  1. Chrome开发者工具一个有用的快捷键组合:Ctrl+Shift+E
  2. SAP Spartacus header区域布局设计
  3. Spring 自动装配模式之byType
  4. SAP Analytics Cloud里看到的SAP C4C的query列表,是从哪里取出来的
  5. 如何为SAP Cloud for Customer Lead页面配置自定义的Source字段
  6. 什么是ABAP的STATE_READ_ACCESS
  7. CBA Opportunity Fiori应用的getEntitySet实现
  8. SAP UI5 workthrough 12 sap.m.shell
  9. 为什么所有的React应用开头都有一行meta charset=utf-8语句?
  10. SAP AET 框架是如何判断一个 SAP CRM UI 能否被扩展