文章目录

  • MyBatis是什么
  • ORM是什么
  • 为什么说Mybatis是半自动ORM映射工具
  • 对于传统的JDBC,MyBatis的优势有哪些
    • 传统 JDBC 开发存在的问题
    • MyBatis解决JDBC编程的不足
  • MyBatis 的优缺点
    • 优点
    • 缺点
  • MyBatis 框架适用场景
  • Hibernate 和 MyBatis 的区别
    • 相同点
    • 不同点
  • 结尾

MyBatis是什么

首先我们来说一下mybatis的什么:

MyBatis 是一款优秀的持久层框架,一个半 ORM(对象关系映射) 框架,它支持定制化
SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以
及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和
Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

ORM是什么

在介绍mybatis时提到ORM,那么ORM是什么
ORM(Object Relational Mapping),对象关系映射,是一种为了解决关系型数据库数据
与简单 Java 对象(POJO)的映射关系的技术。简单的说,ORM 是通过使用描述对象和数
据库之间映射的元数据,将程序中的对象自动持久化到关系型数据库中。

为什么说Mybatis是半自动ORM映射工具

Hibernate 属于全自动 ORM 映射工具,使用 Hibernate 查询关联对象或者关联集合对象
时,可以根据对象关系模型直接获取,所以它是全自动的。
而 Mybatis 在查询关联对象或关联集合对象时,需要手动编写 sql 来完成,所以,称之为
半自动 ORM 映射工具。

对于传统的JDBC,MyBatis的优势有哪些

传统 JDBC 开发存在的问题

  • 频繁创建数据库连接对象、释放,容易造成系统资源浪费,影响系统性能。可以使用连接池解决这个问题。但是使用 jdbc 需要自己实现连接池。
  • sql 语句定义、参数设置、结果集处理存在硬编码。实际项目中 sql 语句变化的可能性较大,
    一旦发生变化,需要修改 java 代码,系统需要重新编译,重新发布。不好维护。
  • 使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不
    一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护。
  • 结果集处理存在重复代码,处理麻烦。如果可以映射成 Java 对象会比较方便。

MyBatis解决JDBC编程的不足

1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接
池可解决此问题。

解决:在 mybatis-config.xml 中配置数据链接池,使用连接池管理数据库连接。

2、Sql 语句写在代码中造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改
变 java 代码。

解决:将 Sql 语句配置在 XXXXmapper.xml 文件中与 java 代码分离。

3、向 sql 语句传参数麻烦,因为 sql 语句的 where 条件不一定,可能多也可能少,占位符
需要和参数一一对应。

解决: Mybatis 自动将 java 对象映射至 sql 语句。

4、对结果集解析麻烦,sql 变化导致解析代码变化,且解析前需要遍历,如果能将数据库
记录封装成 pojo 对象解析比较方便。

解决:Mybatis 自动将 sql 执行结果映射至 java 对象。

MyBatis 的优缺点

优点

与传统的数据库访问技术相比,ORM 有以下优点:
一:

  • 基于 SQL 语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响。
  • SQL写在 XML 里,解除 sql 与程序代码的耦合,便于统一管理。
  • 提供 XML 标签,支持编写动态 SQL 语句,并可重用与 JDBC 相比,减少了 50%以上的代码量,消除了 JDBC 大量冗余的代码,不需要手动开关连接很好的与各种数据库兼容(因为 MyBatis 使用 JDBC 来连接数据库,所以只要 JDBC 支持的数据库 MyBatis 都支持)

二:

  • 提供映射标签,支持对象与数据库的 ORM 字段关系映射。
  • 提供对象关系映射标签,支持对象关系组件维护能够与 Spring 很好的集成

缺点

  • SQL 语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写 SQL 语句的功
    底有一定要求。
  • SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

MyBatis 框架适用场景

MyBatis 专注于 SQL 本身,是一个足够灵活的 DAO 层解决方案。
对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis 将是不错的选择。

Hibernate 和 MyBatis 的区别

相同点

都是对 jdbc 的封装,都是持久层的框架,都用于 dao 层的开发。

不同点

映射关系

  • MyBatis 是一个半自动映射的框架,配置 Java 对象与 sql 语句执行结果的对应关系,多表
    关联关系配置简单
  • Hibernate 是一个全表映射的框架,配置 Java 对象与数据库表的对应关系,多表关联关系
    配置复杂

SQL 优化和移植性

  • Hibernate 对 SQL 语句封装,提供了日志、缓存、级联(级联比 MyBatis 强大)等特性,此外还提供 HQL(Hibernate Query Language)操作数据库,数据库无关性支持好,但会多消耗性能。如果项目需要支持多种数据库,代码开发量少,但 SQL 语句优化困难。
  • MyBatis 需要手动编写 SQL,支持动态 SQL、处理列表、动态生成表名、支持存储过程。
    开发工作量相对大些。直接使用 SQL 语句操作数据库,不支持数据库无关性,但 sql 语句
    优化容易。

开发难易程度和学习成本

  • Hibernate 是重量级框架,学习使用门槛高,适合于需求相对稳定,中小型的项目,比如:
    办公自动化系统。
  • MyBatis 是轻量级框架,学习使用门槛低,适合于需求变化频繁,大型的项目,比如:互
    联网电子商务系统。

结尾

综上所述
MyBatis 是一个小巧方便高效简单直接半自动化的持久层框架,
Hibernate 是一个强大方便高效复杂间接全自动化的持久层框架。

【mybatis】mybatis的特性和优势相关推荐

  1. MyBatis框架的特性

    MyBatis框架的特性 1.mybatis是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架. 2.mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集. 3.mybati ...

  2. 服务器产品的特质和优势,亿速云裸金属服务器兼具“弹性”和“裸金属”两种属性,既有虚拟机的弹性,同时又保留了裸金属的一切性能、特性和优势!...

    (原标题:亿速云裸金属服务器兼具"弹性"和"裸金属"两种属性,既有虚拟机的弹性,同时又保留了裸金属的一切性能.特性和优势!) 今天,我们来讲一讲亿速云弹性计算服 ...

  3. php页面的特点_带你认识PHP的四大特性八大优势

    PHP(PHP: Hypertext Preprocessor的缩写,中文名:"超文本预处理器")是一种通用开源脚本语言.语法吸收了C语言.Java和 Perl的特点,入门门槛较低 ...

  4. php页面的特点_带你一分钟了解php的四大特性八大优势(详情)

    PHP(PHP: Hypertext Preprocessor的缩写,中文名:"超文本预处理器")是一种通用开源脚本语言.语法吸收了C语言.Java和 Perl的特点,入门门槛较低 ...

  5. 7-Java 特性和优势

    文章目录 Java 特性和优势 1. 简单性 2. 面向对象 3. 可移植性(跨平台性) 4. 高性能 5. 分布式 6. 动态性 7. 多线程 8. 安全性 9. 健壮性 思考:Java为什么能够成 ...

  6. 大数据必学Java基础(一):Java体系结构、特性和优势

    文章目录 Java体系结构.特性和优势 一.JAVA简史 [1]SUN公司 [2]Java为什么被发明

  7. MyBatis—MyBatis概述

    文章目录 什么是mybatis MyBatis的生命周期? Dao接口的工作原理是什么? Dao 接口里的方法参数不同时能重载吗? mybatis分页方式 Mybatis 是否支持延迟加载?如果支持, ...

  8. Java的基本特性和优势

    Java三高 三高:高可用.高性能.高并发 Java特性和优势 简单性:C++的简易版,学起来不费力. 面向对象:程序设计技术,重点放在对象和对象的接口上,模拟人的思维.万物皆对象. 可移植性:跨平台 ...

  9. SpringBoot整合mybatis+mybatis分页插件

    第一步:相关依赖 <!--web,servlet引入--> <dependency><groupId>org.springframework.boot</gr ...

  10. php的四大特性八大优势

    PHP(PHP: Hypertext Preprocessor的缩写,中文名:"超文本预处理器")是一种通用开源脚本语言.语法吸收了C语言.Java和 Perl的特点,入门门槛较低 ...

最新文章

  1. 嘿,开发者,你的坑,我来填!
  2. spicy命令_Spicy Spring:动态创建自己的BeanDefinition
  3. mysql运算结果放入表中_MySQL表1新增数据,计算开始、结束日期之间所有时间,插入到表2中...
  4. php txt 下载文件,PHP下载单个TXT文件
  5. 温故而知新:new与override的差异以及virtual方法与abstract方法的区别
  6. 可信开发技术专家---阿里云诚聘
  7. 牛客网-《剑指offer》-二进制中1的个数
  8. 我们需要什么样的应急手册(佐岸)
  9. NVIDIA显卡驱动重装
  10. CANoe CAPL文件操作目录合集
  11. 笔记本电脑计算机无法显示u盘,笔记本不识别u盘怎么办_笔记本电脑不读U盘如何解决-win7之家...
  12. C++中的trivial destructor和non-trivial destructor
  13. 计算机视觉面试宝典--目标检测篇(二)
  14. 计算机网络和HTTP协议:HTTP篇
  15. Word控件Spire.Doc 【页面背景】教程(8) ;在 C# 中将文本水印和图像水印添加到 Word 文档
  16. ImportError: libopencv_imgcodecs.so.4.3: cannot open shared object file: No such file or directory报错
  17. opencv 入门笔记五 padding(图像加边框)
  18. 软件测试——基础篇(软件测试的生命周期和BUG的概念)
  19. 全同态加密:FHEW
  20. 光之触角——光敏电阻、光敏二极管、光敏三极管与光照发生器

热门文章

  1. git常见命令和更新、发布
  2. Android实战技巧:深入解析AsyncTask
  3. Node-express项目--个人简历:搭建posts接口并实现评论、点赞以及相关功能
  4. 熵与神经网络的输出值
  5. Lily上课时使用字母数字图片教小朋友们学习英语单词,每次都需要把这些图片按照大小(ASCII码值从小到大)排列收好。请大家给Lily帮忙,通过C语言解决。
  6. 微信小程序输入框小数点后保留两位
  7. Office EXCEL 表格如何设置某个单元格是选择项,如何设置二级下拉菜单 WPS版
  8. Python学习笔记九10:shelve模块
  9. pandas 排序 给excel_给Excel重度用户准备的Pandas教程:用Pandas逐帧还原20个Excel常用操作...
  10. dhh1applifecyclecn