MyBatis的发展和选型

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 数据层框架的发展史

参考文章列表:

数据层框架的发展史

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接入)
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
数据库 开发者 Java
颠覆传统开发:Hibernate与Spring Boot的集成,让你的开发效率飞跃式提升!
【8月更文挑战第31天】在 Java 开发中,Spring Boot 和 Hibernate 已成为许多开发者的首选技术栈。Spring Boot 简化了配置和部署过程,而 Hibernate 则是一个强大的 ORM 框架,用于管理数据库交互。将两者结合使用,可以极大提升开发效率并构建高性能的现代 Java 应用。本文将通过代码示例展示如何在 Spring Boot 项目中集成 Hibernate,并实现基本的数据库操作,包括添加依赖、配置数据源、创建实体类和仓库接口,以及在服务层和控制器中处理 HTTP 请求。这种组合不仅简化了配置,还提供了一套强大的工具来快速开发现代 Java 应用程序。
199 0
|
6月前
|
XML Java 数据库连接
阿里P7架构师带你修炼MyBatis
我们通过一个简单的权限控制需求(RABC,Role-Based Access Control,基于角色的访问控制),来讲解通过XML方式配置MyBatis的基本用法(即select、update、insert、delete等操作的XML配置方式)。
92 0
|
11月前
|
SQL 缓存 Java
MyBatis的核心技术掌握,简单易懂(上)
MyBatis的核心技术掌握,简单易懂(上)
|
SQL 存储 设计模式
你不知道的 mybatis 四大核心组件
你不知道的 mybatis 四大核心组件
474 0
你不知道的 mybatis 四大核心组件
|
SQL XML Java
MyBatis在我们项目中的地位
MyBatis在我们项目中的地位
|
SQL 存储 缓存
什么是持久层? JDBC 演变的 Mybatis 架构分析
什么是持久层? JDBC 演变的 Mybatis 架构分析
135 0
什么是持久层? JDBC 演变的 Mybatis 架构分析
|
SQL 缓存 NoSQL
MyBatis整体架构解析
MyBatis可以帮助开发人员屏蔽底层重复性的原生JDBC代码,MyBatis通过映射配置文件或相应注解将ResultSet映射为Java对象,其映射规则可以嵌套其他映射规则以及子查询,从而实现复杂的逻辑,也可实现一对一,一对多,多对多映射以及双向映射。相比Hibemate更加轻量级,可控性也更高。
281 0
|
SQL 缓存 Java
Mybatis 整体架构
Mybatis 分为三层架构 • 基础支撑层 • 核心处理层 • 接口层
172 0
|
SQL 存储 XML
MyBatis从前世到今生一网打尽(下)
框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种认为,框架是可被应用开发者定制的应用骨架、模板。​ 简单的说,框架其实是半成品软件,就是一组组件,供你使用完成你自己的系统。从另一个角度来说框架一个舞台,你在舞台上做表演。在框架基础上加入你要完成的功能。
211 0
MyBatis从前世到今生一网打尽(下)
|
SQL XML Java
MyBatis从前世到今生一网打尽(上)
框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种认为,框架是可被应用开发者定制的应用骨架、模板。 ​ 简单的说,框架其实是半成品软件,就是一组组件,供你使用完成你自己的系统。从另一个角度来说框架一个舞台,你在舞台上做表演。在框架基础上加入你要完成的功能。
194 0
MyBatis从前世到今生一网打尽(上)