半自动ORM与全自动ORM框架有什么区别?

什么是 ORM?

ORM

对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。

ORM是面向对象程序设计语言和关系型数据库发展不同步时的解决方案,采用 ORM框架后,应用程序不再直接访问底层数据库,而是以面向对象的方式来操作持久化对象,而ORM框架则将这些面向对象的操作转换成底层的 SQL 操作。

为什么说 Mybatis是半自动 ORM框架,而 Hibenate是全自动 ORM框架?

我们先来看看在持久层框架出现以前我们是如何对数据库进行操作的?

毋庸置疑,我们都使用 JDBC(Java Database Connectivity) 对数据库进行操作。操作步骤如下:

1、加载驱动程序

Class.forName(driverClass)
//加载MySql驱动
Class.forName("com.mysql.jdbc.Driver")
复制代码

2、获取数据库连接

DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/imooc", "root", "root");
复制代码

3、创建 Statement / PerparedStatement 对象

conn.createStatement();
conn.prepareStatement(sql);
复制代码

4、操作数据库

stmt.executeQuery("...");
复制代码

5、关闭连接

stmt.close();
conn.close();
复制代码

Mybatis的实现机制

1、读取 Mybatis的全局配置文件 mybatis-config.xml

2、创建 SqlSessionFactory会话工厂

3、创建 SqlSession会话

4、执行查询操作

mybatis-config.xml文件中包括一系列配置信息,其中包括标签 <mapper>,此标签配置了映射节点,映射节点内部定义了SQL语句。

Mybatis将 SQL的定义工作独立出来,让用户自定义,而 SQL的解析,执行等工作交由 Mybatis处理执行。

Hibenate 的实现机制

1、构建 Configuration实例,初始化该实例中的变量

2、加载 hibenate.cfg.xml 文件到内存

3、通过 hibenate.cfg.xml 文件中的 mapping 节点配置并加载 xxx.hbm.xml 文件至内存

4、利用 Configuration实例构建 SessionFactory 实例

5、由SessionFactory 实例构建 session实例

6、由 session实例创建事务操作接口 Transaction 实例

7、执行查询操作

总结

传统的 jdbc 是手工的,需要程序员加载驱动、建立连接、创建 Statement 对象、定义SQL语句、处理返回结果、关闭连接等操作。

Hibernate 是自动化的,内部封装了JDBC,连 SQL 语句都封装了,理念是即使开发人员不懂SQL语言也可以进行开发工作,向应用程序提供调用接口,直接调用即可。

Mybatis 是半自动化的,是介于 jdbcHibernate之间的持久层框架,也是对 JDBC 进行了封装,不过将SQL的定义工作独立了出来交给用户实现,负责完成剩下的SQL解析,处理等工作。

MybatisHibernate 二者对比有什么特点?

相同点

  • 二者都是对优秀的持久层框架,帮助开发人员简化了开发工作
  • 都是对 JDBC 进行封装
  • 都是通过 SessionFactory 创建 session对象,由 session对象执行对数据库的操作语句

不同点

  • Mybatis是半自动的映射持久层框架;Hibernate是全自动的映射持久层框架
  • Hibernate不需要手动编写SQL,只需要操作相应对象即可,大大降低了对象与数据库的耦合性,而Mybatis需要手动编写 SQL,可移植性HibernateMybatis更高
  • Mybatis支持动态SQL,处理列表,存储过程,开发工作量相对大些;Hibernate提供了 HQL操作数据库,如果项目需要支持多种数据库,代码开发量少,但 SQL语句的优化困难
  • Mybaits入门简单,即学即用;Hibernate学习门槛相对较高

 最后

对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

不用多说,相信大家都有一个共识:无论什么行业,最牛逼的人肯定是站在金字塔端的人。所以,想做一个牛逼的程序员,那么就要让自己站的更高,成为技术大牛并不是一朝一夕的事情,需要时间的沉淀和技术的积累。

现在竞争这么激烈,只有通过不断学习,提高自己,才能保持竞争力。

对于一些不知道学习什么,没有一个系统路线的程序员,这里给大家提供一些学习资料

需要的小伙伴,可以一键三连,点击这里获取免费领取方式

《Java核心知识点合集(283页)》

内容涵盖:Java基础、JVM、高并发、多线程、分布式、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、数据库、云计算等在这里插入图片描述

《Java中高级核心知识点合集(524页)》

在这里插入图片描述

《Java高级架构知识点整理》

在这里插入图片描述

《Docker从入门到实践》

在这里插入图片描述

《spring could 学习笔记》

在这里插入图片描述

《JVM与性能调优知识点整理》

在这里插入图片描述

《MySQL性能调优与架构设计解析文档》305页

在这里插入图片描述

《Nginx入门到实战》319页

在这里插入图片描述

《Java并发编程》385页

在这里插入图片描述

《1000道 互联网Java工程师面试题 (485页)》

在这里插入图片描述

需要的小伙伴,可以一键三连,点击这里获取免费领取方式 


版权声明:本文为m0_58554082原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。