mybatis的目前最流行的ORM框架,几乎涵盖所有的互联网的领域,那么mybatis为什么会这么流行,相较JDBC和其他ORM框架又有什么样的特点和优势?我们会在接下来的学习中逐渐揭开?

一、 JDBC回顾

我们先来回顾传统的JDBC开发,作为java提供给数据库厂商的接口规范,根据数据库的不同,有不同的实现方法,那么,JDBC的开发需要哪些步骤:

(1) 加载驱动
    (2) 配置数据库连接参数
    (3) 获取数据库连接connection
    (4) 获取SQL执行通道statement
    (5) 执行SQL,返回结果集resultSet
    (6) 关闭数据库所有的连接通道
下面是操作代码:

package com.fan.jdbcdemo;import java.sql.*;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;public class JdbcDemo {public static void main(String[] args) {try{Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","www1928..com");Statement st = connection.createStatement();ResultSet rs = st.executeQuery("SELECT * FROM USER WHERE NAME = 'zhangqian'");Map<String, Object> resultMap = new HashMap<String, Object>(8);/*封装结果集*/while(rs.next()) {resultMap.put("name", rs.getString(1));resultMap.put("age", rs.getString(2));}Set<Map.Entry<String, Object>> set = resultMap.entrySet();Iterator<Map.Entry<String, Object>> iterator = set.iterator();while(iterator.hasNext()) {Map.Entry<String, Object> entry = iterator.next();System.out.println(entry.getKey() + ":" + entry.getValue());}} catch(Exception e) {e.printStackTrace();}finally {            //关闭连接通道,就不写了         }}
}

上面的数据库操作中,我们不仅需要通过大量代码去查询结果集,还得将结果手动封装,才能被其他代码调用,所以在实际的项目开发中,这显然会产生大量的无意义的重复性代码,所以需要将重复的代码进行抽取,

可以看出变化的都只是数据和结果集的映射,诸如数据库连接等是一直不变,所以为了解决这种问题就出现了ORM(Object  Reliational Mapper)框架,最早的ORM要追随EJB框架,但是EJB过于复杂,

很快就被淘汰,随之出现了Hibernate框架, Hibernate的出现解决了持久层代码重复的问题,但是随着互联网的发展,数据量越来越大,业务越来越复杂,数据库表变复杂,由于,高度的对sql的封装,

导致在性能上无法进行优化,甚至在一些查询,直接导致全表扫描等问题,这在今天网站访问中是不被允许的,为了解决的Hibernate的问题,半自动框架mybatis随之而生。

二、认识Mybatis

那么,Mybatis的相较于JDBC做了哪些优化了,首先提一下Mybatis的开发步骤:

(1)配置config.xml文件(主要配置数据库连接,驱动,缓存等)

(2)配置映射文件mapper.xml(主要配置SQL和接口的映射)

(3)  获取session执行数据库操作,返回结果集

(4)关闭session对象

可以看出,Mybatis框架,封装了数据路连接和结果集封装的代码,使用者只需要关心session对象和sql语句,在与Spring集成之后,几乎所有的功能代码交给框架,而开发人员只需要关心业务逻辑

代码。

三、JDBC、Mybatis、Hibernate的优缺点

(1)JDBC

优点:原生javaAPI,执行效率高

缺点:重复性代码过多

需要管理数据库连接

使用完成后需要关闭所有对象资源

(2)Hibernate

优点:

消除了代码的映射的规则
               无需管理数据库连接

提供缓存支持
               持久化操作只需要操作session对象即可
               关闭资源只需要关闭session对象

缺点:

由于是对象和字段映射,对于更新操作需要发送所有字段,占用资源
              无法根据不同的条件组装不同SQL
              对于复杂的SQL查询,需要自己完成SQL,并封装结果集
             不能有效支持存储过程
             无法优化SQL,性能差

(3)Mybatis

优点:

可以动态生成映射关系
         消除了大多数JDBC代码
         提供缓存支持
         支持多数日志接口
         可以灵活的优化SQL
         维护简单,上手难度低

缺点:

需要自己动手完成SQL编写,工作量大

转载于:https://www.cnblogs.com/zhexuejun/p/11190301.html

第一篇 mybatis的简介相关推荐

  1. <Android开发> Android vold - 第一篇 vold前言简介

    本系列主要介绍 Android vold,分为以下篇章 <Android开发> Android vold - 第一篇 vold前言简介 <Android开发> Android ...

  2. Python 第一篇:python简介和入门

    一.python简介 1.python下载地址:https://www.python.org/downloads/ Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆 ...

  3. Python学习之路【第一篇】-Python简介和基础入门

    1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...

  4. STM32F407--驱动OV2640采集图像数据,通过W5500传输至上位机---第一篇:OV2640简介及SCCB协议

    以下内容皆是个人学习过程中的总结,记录一下整个过程,用于后期复习,如有不对之处,麻烦各位大佬指出~ (喜欢的朋友麻烦点个关注~~~ 后期还会进行持续更新) OV2640概述: OV2640是OV (O ...

  5. [iBoard 电子学堂][第二卷 C程序设计语言 ]第一篇 C语言简介

    一.C语言发展史   C语言是一种程序设计语言,由于它既有高级语言的特性,又有低级语言的特性,所以它既能编写基于操作系统的大型应用程序,也能编写直接操作硬件的程序,也就是我们称之为"裸奔&q ...

  6. 【Linux上分之路】第一篇:Linux简介、发行版、开源协议

    文章目录 Linux Linux的优点 Linux分类 Linux发行版本 RedHat Linux Ubuntu Linux Linux系统结构 1.内核层 2.Shell层 3.应用层 Linux ...

  7. Python之路【第一篇】:Python简介和入门

    Python之路[第一篇]:Python简介和入门 Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗 ...

  8. Mybatis源码分析第一天------Mybatis实用篇

    Mybatis源码分析第一天------Mybatis实用篇 一切最基本的操作就是参考官方文档:https://mybatis.org/mybatis-3/zh/configuration.html ...

  9. 第一篇综述-无人车简介(二)

    第一篇综述-无人车简介(一) 目录 正面影响 巨大经济效益 增加驾驶安全 缓解交通拥堵 降低环境污染 负面影响 大量人员失业 泄露隐私 公共安全威胁 面临的挑战 伦理道德 责任归属 技术障碍 正面影响 ...

最新文章

  1. Python开发工程师必知十大机器学习库
  2. css border 制作三角形
  3. seo html空格影响,这一对HTML标签嵌套对SEO优化的影响,居然99%的人不知道!
  4. 被VS Code牢牢圈粉了!
  5. 处理增删改_这10个批量处理的PPT技巧,让你的效率提升100倍!
  6. Hbase总结(十)Hhase性能调优
  7. 控制SAP Spartacus shipping address页面spinner显示的逻辑
  8. P4316-绿豆蛙的归宿【数学期望】
  9. 使用equals判断对象是否相等出现的错误
  10. chartjs和echartsjs库简介
  11. linux 挂iscisc存储,基于arm的嵌入式linux操作系统的移植研究-通信与信息系统专业论文.docx...
  12. python for IOS,支持iPhone
  13. Java class located out of the source root
  14. 较于微信红包,支付宝AR红包是个好产品吗?
  15. poj1125Stockbroker Grapevine(最短路floyd)
  16. 水果销售系统功能设计
  17. EasyPR-Java新能源车牌识别
  18. iOS之音视频的理论和直播相关知识
  19. python 均方误差_方差、标准差、均方差、均方误差
  20. STM32单片机裸机程序-高级实现实时性处理方法

热门文章

  1. C语言分支结构while,C语言学习:分支结构和循环结构的总结(收藏)
  2. macos php开发环境,macOS 10.13 High Sierra PHP开发环境配置
  3. 为什么选择react?为前端开发选择React的六大理由
  4. matebook13linux送U盘系统,HUAWEI MateBook 13笔记本U盘安装win10系统的操作教程
  5. 轴固定位置_全面总结:轴零件固定方式及特点
  6. qt绘图事件(画刷的填充)
  7. linux内核ttyusb实现,[zhuan]Linux的USB-Serial驱动(从系统初始化到生成tty设备的全过程)...
  8. ffmpeg源码分析_ffmpeg音视频同步的几种策略
  9. python发送qq消息linux_python 调用qq邮箱 linux 执行每天自动发送邮件
  10. 谷歌大神Jeff Dean领衔,万字展望5大AI趋势