专栏首页老男孩成长之路MyBatis的发展和选型

MyBatis的发展和选型

数据层框架的发展史

JDBC编码的几大问题和MyBatis等框架的发展支持原因? 在最初编写JDBC连接数据库的时候,各种代码操作较为复杂,而且有很多缺陷。缺陷总结如下:

  • 方法的封装问题
  • 数据源的支持
  • 映射结果集的接收和处理
  • SQL语句硬编码
  • 程序参数只能按照顺序传入(占位符)
  • 没有实现实体类到数据库记录的映射
  • 没有提供缓存等功能

工具类封装的出现解决了一部分问题

相应的工具类如:springjdbc、jdbcutils、Apache DbUtils等。这样的工具类主要解决了一下几个问题:

  • 方法的封装
  • 数据源的支持
  • 映射结果集

工具类的响应实现解决了部分JDBC的缺陷,但是并不完美。每一次的改进和工具类的出现的就是我们框架的前身出现,框架也是工具。在越来越完善的解决方案的出现之后,ORM框架基本就成型了。同时解决了以上JDBC列出来的各种问题。

ORM框架,全称Object Relational Mapping,对象关系的映

面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。

ORM框架的基本准则

  • A. 简单:ORM以最基本的形式建模数据。比如ORM会将MySQL的一张表映射成一个Java类(模型),表的字段就是这个类的成员变量
  • B. 精确:ORM使所有的MySQL数据表都按照统一的标准精确地映射成java类,使系统在代码层面保持准确统一
  • C.易懂:ORM使数据库结构文档化。比如MySQL数据库就被ORM转换为了java程序员可以读懂的java类,java程序员可以只把注意力放在他擅长的java层面(当然能够熟练掌握MySQL更好)
  • D.易用:ORM包含对持久类对象进行CRUD操作的API,例如create(), update(), save(), load(), find(), find_all(), where()等,也就是讲sql查询全部封装成了编程语言中的函数,通过函数的链式组合生成最终的SQL语句。通过这种封装避免了不规范、冗余、风格不统一的SQL语句,可以避免很多人为Bug,方便编码风格的统一和后期维护。

最早的ORM框架hibernate

Hibernate是一种ORM框架,全称为 Object_Relative DateBase-Mapping,在Java对象与关系数据库之间建立某种映射,以实现直接存取Java对象!

Hibernate 优势
  • 类别到数据库表格中,并且不用编写任何代码。
  • 为在数据库中直接储存和检索 Java 对象提供简单的 APIs。
  • 如果在数据库中或任何其它表格中出现变化,那么仅需要改变 XML 文件属性。
  • 抽象不熟悉的 SQL 类型,并为我们提供工作中所熟悉的 Java 对象。
  • Hibernate 不需要应用程序服务器来操作。
  • 操控你数据库中对象复杂的关联。
  • 最小化与访问数据库的智能提取策略。
  • 提供简单的数据询问。
Hibernate 响应的一些问题
  • 无法自定义SQL,优化相对困难
  • 不制动动态的SQL
  • 复杂的表关系会导致Hibernate开发难度
  • 加载问题

什么是 MyBatis?

是一款面向对象和返回集关系的数据层封装,有效的减少jdbc的代码。

缺点:
  • 不方便移植,数据库更换需要字段比较麻烦,需要改写sql
  • 对开发人员所写的SQL依赖很强。
优点:
  • 使用连接池对连接进行管理
  • SQL和代码分离,集中管理
  • 参数映射和动态SQL
  • 结果集映射
  • 缓存管理
  • 重复SQL的提取
  • 插件机制
  • 手写sql,能够有效的精准把控查询的速度,便于优化查询速度
  • mybatis不会对应用程序或者数据库的现有设计强加任何影响
  • 通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。
  • 保证名称相同,配置好映射关系即可自动映射或者,不配置映射关系,通过配置列名=字段名也可完成自动映射。

什么是 Spring Data JPA(本文JPA只写Spring Data JPA)

Spring Data JPA是更大的Spring Data系列的一部分,可以轻松实现基于JPA的存储库。此模块处理对基于JPA的数据访问层的增强支持。它使构建使用数据访问技术的Spring驱动应用程序变得更加容易。

选择什么样的ORM框架参考:

  • 业务相对简单项目可以使用Hibernate
  • 需要灵活SQL的选择可以使用MyBatis(SQL过长和SQL很复杂的情况)
  • 对性能要求比较高可以使用JDBC(如:我们写的项目很小,或者说就是需要几个接口,这个时候我们选择框架就会过于臃肿和复杂)
  • Sping JDBC可以和 ORM框架混合使用(这种情况很少,但是如果某些业务可能单独需要数据源对接某一个接口,这个时候可能要适配器兼容JDBC接入)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 面试官上来就问:Java 进程中有哪些组件会占用内存?

    不管是持久化的消息还是非持久化的消息都可以被写入到磁盘。持久化的消息在到达队列时就被写入到磁盘,并且如果可以,持久化的消息也会在内存中保存一份备份,这样可以提高...

    Java_老男孩
  • SQL 调优三板斧,拿好拿稳了

    大家都知道,至少老读者应该都知道,我是从网管,编程,DBA,数仓一路爬过来的。这么多年的风里雨里多少有些技术上的技巧可以分享给大家。还记得有个曾经抖落过一段小插...

    Java_老男孩
  • 微服务设计关键的难点:微服务架构的数据库是如何设计的?

    微服务设计的一个关键是数据库设计,基本原则是每个服务都有自己单独的数据库,而且只有微服务本身可以访问这个数据库。它是基于下面三个原因。

    Java_老男孩
  • 数据映射组件NewLife.XCode优势

    数据映射组件XCode优势 XCode是一个超越了ORM范围的映射组件,除了对象到关系数据库的映射外,还有到网络和其它二进制形式等的映射,所以称之为数据映射组件...

    大石头
  • 深入浅出MyBatis:JDBC和MyBatis介绍

    最近在休陪产假,时间比较零碎,准备看2本书充实下,一本是「深入浅出MyBatis:技术原理与实践」,一本是「RabbitMQ实战:高效部署分布式消息队列」,为了...

    情情说
  • 数据库副本的自动种子设定(自增长)

    背景 在 SQL Server 2012 和 2014 中,初始化 SQL Server Always On 可用性组中的次要副本的唯一方法是使用备份、复制和还...

    用户1217611
  • 史上首个线上 AI 顶会 ICLR 2020 结束,参会者数量翻番:仿佛看到了未来

    人人都是云参会,因为新冠疫情被迫线上举行的 ICLR 2020 成为了历届规模最大的会议,参加人数暴增了一倍。

    机器之心
  • 疾病相关单细胞数据库

    对于对于测序而言,单细胞测序算是很火的一个测序技术了。简单来说单细胞测序技术的,就是对每一个细胞来进行测序。相较于之前的RNA-seq而言,我们其实是对某一块组...

    医学数据库百科
  • 【7】AccessDB快速数据访问

    阅读目录 C#和VB数据访问的比较 AccessDB的设计 数据库的连接 三种主要操作 错误输出及调试 小结 C#和VB数据访问的比较 C#中要进行...

    用户1075292
  • SAP HANA租户库Ⅰ

    SAP HANA 1.0从SPS10开始就推出了多租户库,而在SAP HANA 2.0 SPS01开始,多租户数据库容器,我们简称MDC将成为SAP HANA系...

    matinal

扫码关注云+社区

领取腾讯云代金券