【1】Mybatis

官网地址:https://github.com/mybatis/mybatis-3

① 概要

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

mybatis原是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation 迁移到了Google Code,随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis ,代码于2013年11月迁移到Github(下载地址见后)。

iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。

当前,最新版本是MyBatis 3.5.7 ,其发布时间是2021年4月21日。

mybatis的功能结构

Mybatis的功能架构可以分为三层:

  • API接口层

    提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。

  • 数据处理层

    负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

  • 基础支撑层

    负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑

③ 为什么使用mybatis

MyBatis是一个半自动化的持久化层框架。

  • JDBC
    –SQL夹在Java代码块里,耦合度高导致硬编码内伤
    –维护不易且实际开发需求中sql是有变化,频繁修改的情况多见
  • Hibernate和JPA
    –长难复杂SQL,对于Hibernate而言处理也不容易
    –内部自动生产的SQL,不容易做特殊优化。
    –基于全映射的全自动框架,大量字段的POJO进行部分映射时比较困难。导致数据库性能下降。
  • 对开发人员而言,核心sql还是需要自己优化
  • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
  • 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象与数据库的orm字段关系映射
  • 提供对象关系映射标签,支持对象关系组建维护
  • 提供xml标签,支持编写动态sql。

mybatis系列博客:https://blog.csdn.net/j080624/category_6431267.html


【2】Hibernate

官网地址:http://hibernate.org/orm/

中文文档:https://hibernate.net.cn/

① 概要

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架。hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JavaEE架构中取代CMP,完成数据持久化的重任。

Hibernate的API一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。通过这些接口,可以对持久化对象进行存取、事务控制。

hibernate工作原理

1、通过Configuration().configure();//读取并解析hibernate.cfg.xml配置文件。
2、由hibernate.cfg.xml中的<mappingresource="com/xx/User.hbm.xml"/>//读取解析映射信息。
3、通过config.buildSessionFactory();//得到sessionFactory。
4、sessionFactory.openSession();//得到session。
5、session.beginTransaction();//开启事务。
6、persistent operate; //持久化层操作
7、session.getTransaction().commit();//提交事务
8、关闭session;
9、关闭sessionFactory;

② 为什么使用hibernate

  • 封装了jdbc,简化了很多重复性代码。
  • 简化了DAO层编码工作,使开发更对象化了,
  • 移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了(改变数据库方言),不用改变hibernate代码。
  • 支持透明持久化,因为hibernate操作的是纯粹的(pojo)java类,没有实现任何接口,没有侵入性。所以说它是一个轻量级框架。Hibernate不要求持久化类实现任何接口或继承任何类,POJO即可

hibernate系列博客:https://blog.csdn.net/j080624/category_8101465.html


【3】Spring Data JPA

官网地址:https://docs.spring.io/spring-data/jpa/docs/2.5.2/reference/html/#preface

① 概要

jpa,即Java Persistence API,是用于对象持久化的API。Java EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层。也就是说,JPA是一组规范,不是框架!默认实现框架是Hibernate。

JPA包含三方面技术

  • ORM 映射元数据

    JPA 支持 XML 和 JDK 5.0 注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。

  • JPA 的 API

    用来操作实体对象,执行CRUD操作,框架在后台完成所有的事情,开发者从繁琐的 JDBC和 SQL代码中解脱出来。

  • 查询语言(JPQL)

    这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序和具体的 SQL 紧密耦合。

jpa与hibernate关系

JPA 是 hibernate 的一个抽象(就像JDBC和JDBC驱动的关系),JPA 本质上就是一种 ORM 规范,不是ORM 框架 —— 因为 JPA 并未提供 ORM 实现,它只是制订了一些规范,提供了一些编程的 API 接口,但具体实现则由 ORM 厂商提供实现

Hibernate 除了作为 ORM 框架之外,它也是一种 JPA 实现。从功能上来说, JPA 是 Hibernate 功能的一个子集。

JPA 的目标之一是制定一个可以由很多供应商实现的 API,目前Hibernate 3.2+、TopLink 10.1+ 以及 OpenJPA 都提供了 JPA 的实现。

HibernateJPA 的始作俑者就是 Hibernate 的作者Hibernate 从 3.2 开始兼容 JPA
OpenJPAOpenJPA  是 Apache 组织提供的开源项目
TopLinkTopLink 以前需要收费,如今开源了

② 为什么使用Spring Data JPA

  • 标准化

    JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行。

  • 简单易用,集成方便

    JPA的主要目标之一就是提供更加简单的编程模型:在JPA框架下创建实体和创建Java 类一样简单,没有任何的约束和限制,只需要使用 javax.persistence.Entity进行注释,JPA的框架和接口也都非常简单,没有太多特别的规则和设计模式的要求,开发者可以很容易地掌握。JPA基于非侵入式原则设计,因此可以很容易地和其它框架或者容器集成。

  • 可媲美JDBC的查询能力

    JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是Hibernate HQL的等价物。JPA定义了独特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。

  • 支持面向对象的高级特性

    JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。

JPA的系列博客:https://blog.csdn.net/j080624/category_7333335.htm


【4】Mybatis Plus

官网文档:https://mp.baomidou.com/guide/

① 概要

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

框架结构如下:

② 特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

mybatis plus系列博文:https://blog.csdn.net/j080624/category_10222714.html

几种常见的ORM框架相关推荐

  1. 【测试开发】几种常见的自动化测试框架

    几种常见的自动化测试框架 在软件测试领域,自动化测试框架有很多,这里主要介绍几种常用的自动化测试框架. 1.pytest pytest 是 Python 的一种单元测试框架,与 Python 自带的 ...

  2. .NET有几种主流的ORM框架

    前言 在以前的一篇文章中,为大家分享了<什么是ORM?为什么用ORM?浅析ORM的使用及利弊>.那么,在目前的.NET(C#)的世界里,有哪些主流的ORM,SqlSugar,Dapper, ...

  3. 五种常见的自动化测试框架

    一.什么是测试自动化框架 自动化测试框架就是用于测试自动化的框架.具体来说,它提供了自动化测试用例编写.自动化测试用例执行.自动化测试报告生成等基础功能.我们只需要基于这个框架,完成和业务高度相关的测 ...

  4. 4种常见的osgi框架比较

    OSGi正在成为一种趋势,越来越多的项目采用了OSGi,越来越多的中间件都开始采取了OSGi的标准. 什么是OSGi OSGi的名称来源于其开源组织的名称Open Services Gateway i ...

  5. Orm框架介绍和常见的Android Orm框架

    ORM(Object Relational Mapping)框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中. 先介绍一下ORM的概念,以前也一直听说 ...

  6. java orm框架什么意思_ORM框架是什么

    ORM框架是什么 对象关系映射,目前数据库是关系型数据库  ORM 主要是把数据库中的关系数据映射称为程序中的对象 目前集中常见的ORM框架 1  Nhibernate 原因:用的比较多,资料也比较好 ...

  7. flask orm 数据库_Flask:使用ORM框架操作数据库

    在Flask中并没有限制我们使用哪种方式来操作数据库,如果使用原生SQL的方式来操作数据库,随着项目代码量的提升会发现有大量操作数据库的冗余代码,以及大量SQL语句与逻辑代码杂糅在一起不利于核心代码的 ...

  8. ORM框架之Spring Data JPA(一)Hibernate实现JPA规范

    一.ORM简述 ORM(Object-Relational Mapping) 表示对象关系映射.在面向对象的软件开发中,通过ORM,就可以把对象映射到关系型数据库中.只要有一套程序能够做到建立对象与数 ...

  9. java orm框架 博客园_ORM框架的前世今生

    目录 一.ORM简介 二.ORM的工作原理 三.ORM的优缺点 四.常见的ORM框架 一.ORM简介 ORM(Object Relational Mapping)对象关系映射,一般指持久化数据和实体对 ...

最新文章

  1. Linux服务器搭建常用环境(一)
  2. Web开发(一)·期末不挂之第六章·网页布局(浮动定位)
  3. 一次解决Linux内核内存泄漏实战全过程
  4. 中国书法之美 No。2017-08-30
  5. pds如何安装虚拟服务器,PDS工业缝纫机制版软件安装及常见问题解决方法
  6. 郭盛华为什么不去阿里巴巴?原因竟是这个
  7. 双击打不开pycharm问题
  8. 设置计算机用户权限,计算机管理员权限在哪里设置_电脑系统如何设置管理员权限-win7之家...
  9. samba服务器配置例子(网吧电影服务器)
  10. 云原生的进一步具象化
  11. python中空格键怎么写_python的空格键
  12. Docker: 绿色版docker(带dockerui)安装测试记录_20200120_七侠镇莫尛貝
  13. 北京大学可视化发展前沿研究生暑期学校Day2
  14. 计算机 优质课教案,计算机优质课教案.doc
  15. 充足理由律-存在即合理
  16. 51智能小车黑线寻迹(防出线)
  17. 《袁老师访谈录》第九期丨陈家强教授/香港科大商学院前院长【问诊未来·院长系列:科技铺就金融创新之路】...
  18. 为远程桌面Ubuntu配置固定的公网TCP端口地址【内网穿透】
  19. 使用openssl的EVP接口使用sm2算法加解密等操作
  20. 双麦克风语音去混响算法C代码实现(附github项目链接)

热门文章

  1. 学校计算机实训室标语,职业学校实训室标语
  2. vant库 van-image标签无法引用本地图片
  3. 1.Java实现音频录制和音频播放
  4. C++学习笔记—模板与STL
  5. pycharm 自动生成文件注释和函数模板
  6. hdu 4411 最小费用流
  7. 薛蛮子担任顾问的新项目,去中心化数据交易平台XChain
  8. 适合新手--特征点匹配及消除误匹配点-python语言-适用于深度学习提取的特征点和描述符(超简单)
  9. 计算机二维辅助设计课程设计的目的,《计算机辅助设计》课程教学大纲
  10. 用友政务表格技术应用开发实践:预算一体化产品核心功能搭建