2021-Java ORM概念总结

什么是ORM

ORM,即对象关系映射(Object Relational Mapping)模式

在初学Java的时候,都是使用JDBC方式连接数据库。之后逐步使用EclipseLink 、iBATIS(半自动) 和Hibernate(全自动)等开源ORM框架。

JDBC的使用流程为:

  1. 加载数据库驱动 (JDBC Driver)
  2. 创建数据库链接
  3. 创建编译对象(预编译对象PrepareStatement
  4. 设置入参执行SQL
  5. 返回结果集(resultSet)

image-20230319134837722

JDBC使用流程

image-20230312192006619

使用JDBC连接数据库

ORM框架主要可以解决面向对象与关系数据库之间互不匹配的问题,即用于处理面向对象编程语言中不同类型系统间的数据转换

#JDBC的缺点

  • 硬编码 –>反射,封装,代理
  • 频繁释放数据库连接资源 –>连接池

image-20230319140832760

#为什么会出现ORM思想

先从项目中数据流存储形式这个角度说起.简单拿MVC这种分层模式来说,Model作为数据承载实体.在用户界面层和业务逻辑层之间数据实现面向对象OO形式传递.当我们需要通过Control层分发请求把数据持久化时我们会发现.内存中的面向对象的OO如何持久化成关系型数据中存储一条实际数据记录呢?

面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的。两者之间是不匹配的。而ORM作为项目中间件形式实现数据在不同场景下数据关系映射。对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术ORM就是这样而来的.

ORM是连接数据库的桥梁,只要提供了持久化类与表的映射关系,ORM框架在运行是就能参照映射文件的信息将对象持久化到数据库中

它的作用就是在关系型数据库和业务实体对象之间做一层映射,这样在具体操作业务对象时,就不需要和复杂的SQL语句打交道,而只需简单操作对象的属性和方法

在这里插入图片描述

#优缺点

优点:

  1. 隐藏数据访问细节,封闭的进行交互。
  2. 构造固化数据结构简单。

缺点:

  1. 自动化意味着映射和关联管理,代价是牺牲性能(现在ORM采用各种方法减轻这块,LazyLoad Cache)
  2. 面对复杂查询,ORM力不从心

#ORM框架和MyBatis的区别

ORM框架:将数据库表一行对应一个类实例。对类的操作会影响到数据库

MyBatis:将查询语句所得到的ResultSet映射成类,在使用数据库时需要写SQL语句,对类的修改不会影响到数据库

参考:

什么是ORM,设计架构(opens new window)

#ORM框架设计

ORM框架主要通过参数映射、SQL解析和执行,以及结果映射的方式对数据库进行操作

image-20230312162050029

ORM框架实现的核心类包括加载配置文件、解析XML文件、获取数据库Session、操作数据库以及返回结果

image-20230312165147079

  • SqlSession时对数据库进行定义和处理的类,包括常用的方法,如selectOneselectList
  • DefaultSqlSessionFactory对数据库配置的开启绘画的工厂处理类,这里的工厂会操作DefaultSqlSession
  • SqlSessionFactoryBuilder是对数据库进行操作的核心类,包括处理工厂、解析解析 和获取会话

#如果让你实现一个MyBatis ,应该怎么设计?

手写MyBatis-第 3 页.drawio