第一篇 mybatis的简介
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的简介相关推荐
- <Android开发> Android vold - 第一篇 vold前言简介
本系列主要介绍 Android vold,分为以下篇章 <Android开发> Android vold - 第一篇 vold前言简介 <Android开发> Android ...
- Python 第一篇:python简介和入门
一.python简介 1.python下载地址:https://www.python.org/downloads/ Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆 ...
- Python学习之路【第一篇】-Python简介和基础入门
1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...
- STM32F407--驱动OV2640采集图像数据,通过W5500传输至上位机---第一篇:OV2640简介及SCCB协议
以下内容皆是个人学习过程中的总结,记录一下整个过程,用于后期复习,如有不对之处,麻烦各位大佬指出~ (喜欢的朋友麻烦点个关注~~~ 后期还会进行持续更新) OV2640概述: OV2640是OV (O ...
- [iBoard 电子学堂][第二卷 C程序设计语言 ]第一篇 C语言简介
一.C语言发展史 C语言是一种程序设计语言,由于它既有高级语言的特性,又有低级语言的特性,所以它既能编写基于操作系统的大型应用程序,也能编写直接操作硬件的程序,也就是我们称之为"裸奔&q ...
- 【Linux上分之路】第一篇:Linux简介、发行版、开源协议
文章目录 Linux Linux的优点 Linux分类 Linux发行版本 RedHat Linux Ubuntu Linux Linux系统结构 1.内核层 2.Shell层 3.应用层 Linux ...
- Python之路【第一篇】:Python简介和入门
Python之路[第一篇]:Python简介和入门 Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗 ...
- Mybatis源码分析第一天------Mybatis实用篇
Mybatis源码分析第一天------Mybatis实用篇 一切最基本的操作就是参考官方文档:https://mybatis.org/mybatis-3/zh/configuration.html ...
- 第一篇综述-无人车简介(二)
第一篇综述-无人车简介(一) 目录 正面影响 巨大经济效益 增加驾驶安全 缓解交通拥堵 降低环境污染 负面影响 大量人员失业 泄露隐私 公共安全威胁 面临的挑战 伦理道德 责任归属 技术障碍 正面影响 ...
最新文章
- Python开发工程师必知十大机器学习库
- css border 制作三角形
- seo html空格影响,这一对HTML标签嵌套对SEO优化的影响,居然99%的人不知道!
- 被VS Code牢牢圈粉了!
- 处理增删改_这10个批量处理的PPT技巧,让你的效率提升100倍!
- Hbase总结(十)Hhase性能调优
- 控制SAP Spartacus shipping address页面spinner显示的逻辑
- P4316-绿豆蛙的归宿【数学期望】
- 使用equals判断对象是否相等出现的错误
- chartjs和echartsjs库简介
- linux 挂iscisc存储,基于arm的嵌入式linux操作系统的移植研究-通信与信息系统专业论文.docx...
- python for IOS,支持iPhone
- Java class located out of the source root
- 较于微信红包,支付宝AR红包是个好产品吗?
- poj1125Stockbroker Grapevine(最短路floyd)
- 水果销售系统功能设计
- EasyPR-Java新能源车牌识别
- iOS之音视频的理论和直播相关知识
- python 均方误差_方差、标准差、均方差、均方误差
- STM32单片机裸机程序-高级实现实时性处理方法
热门文章
- C语言分支结构while,C语言学习:分支结构和循环结构的总结(收藏)
- macos php开发环境,macOS 10.13 High Sierra PHP开发环境配置
- 为什么选择react?为前端开发选择React的六大理由
- matebook13linux送U盘系统,HUAWEI MateBook 13笔记本U盘安装win10系统的操作教程
- 轴固定位置_全面总结:轴零件固定方式及特点
- qt绘图事件(画刷的填充)
- linux内核ttyusb实现,[zhuan]Linux的USB-Serial驱动(从系统初始化到生成tty设备的全过程)...
- ffmpeg源码分析_ffmpeg音视频同步的几种策略
- python发送qq消息linux_python 调用qq邮箱 linux 执行每天自动发送邮件
- 谷歌大神Jeff Dean领衔,万字展望5大AI趋势