什么是ORM
文章摘自网络:
https://www.cnblogs.com/weibanggang/p/10167006.html
https://blog.csdn.net/sinat_37976731/article/details/80504148
一、ORM简介
ORM:对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping)
用于实现面向对象编程语言里不同类型系统的数据之间的转换。
-
- ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象与关系数据库相互映射
- ORM可以解决数据库与程序间的异构性,比如:在Java中我们使用String表示字符串,而Oracle中可使用varchar2,MySQL中可使用varchar,SQLServer可使用nvarchar。
没有ORM时我们是这样完成对象与关系数据库之间的映射的:
//将执行的sql String sql = "SELECT name, id, age, password FROM users"; //创建命令对象 preparedStatement = connection.prepareStatement(sql); //执行并获得结果集 resultSet = preparedStatement.executeQuery(); //遍历结果集,将数据库中的数据转换成Java中的对象 while(resultSet.next()){ String name = resultSet.getString("name"); int id = resultSet.getInt("id"); int age = resultSet.getInt("age"); String password = resultSet.getString("password"); User entity= new User(name,id,age,password); Users.add(entity); }
这种方案存在以下不足:
- 持久化层缺乏弹性。一旦出现业务需求的变更,就必须修改持久化层的接口
- 持久化层同时与域模型与关系数据库模型绑定,不管域模型还是关系数据库模型发生变化,都要修改持久化曾的相关程序代码,增加了软件的维护难度。
- 将和数据库交互(CRUD)的代码硬编码到JDBC程序中
- 实现健壮的持久化层需要高超的开发技巧,而且编程量很大
- 对象模型和关系模型的转换非常麻烦
二、ORM(O/R Mapping:对象关系映射):
- 它是一种将内存中的对象保存到关系型数据库中的技术
- 主要负责实体域对象的持久化,封装数据库访问细节
- 提供了实现持久化层的另一种模式,采用映射元数据(XML)来描述对象-关系的映射细节,使得ORM中间件能在任何一个Java应用的业务逻辑层和数据库之间充当桥梁。
三、ORM的方法论基于三个核心原则:
·简单:以最基本的形式建模数据。
· 传达性:数据库结构被任何人都能理解的语言文档化。
· 精确性:基于数据模型创建正确标准化了的结构。
四、Java典型的ORM中有:
hibernate:全自动的框架,强大、复杂、笨重、学习成本较高。
(Hibernate 是一个开放源代码的 O/R Mapping 框架(中间件),他对JDBC进行了轻量级的封装,使Java程序员可以随心所欲地使用面向对象编程思维来操纵数据库。)
Mybatis:半自动的框架(懂数据库的人 才能操作) 必须要自己写sql。
(iBATIS也是开放源代码的O/R Mapping框架,但这是一种“半自动化”的ORM实现。所谓“半自动”,iBATIS以SQL开发的工作量和数据库移植性方面的让步,为系统设计提供了更大的自由空间。)
JPA:JPA全称Java Persistence API、JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,是Java自带的框架
( Java Persistence API,JPA是JCP组织发布的Java EE 标准之一;
JPA通过从JDK5.0开始的Annotation(注解)或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
从功能上来说,JPA现在就是Hibernate功能的一个子集。Hibernate从3.2开始,就开始兼容JPA。
JPA中支持大数据集、事务、并发等容器级事务,这使得JPA超越了简单持久化框架的局限,在企业应用中发挥更大的作用。)
原文地址:https://www.cnblogs.com/chen2608/p/11371869.html
- 一千个不用 Null 的理由
- TensorFlow强化学习入门(1.5)——上下文赌博机
- 以太坊·代币开发详解
- JSON Web Token - 在Web应用间安全地传递信息
- TensorFlow强化学习入门(2)——基于策略的Agents
- 用ABAP 生成二维码 QR Code
- CDS view注解解析 - @Environment.systemField
- Document flow API in SAP CRM and C4C
- Python基础知识4:文件操作
- Python基础知识6:格式化字符、颜色
- 给自定义控件(Web Control)添加事件的几种方法。前两种方法可以不实现IPostBackEventHandler
- 【开源】QuickPager ASP.NET2.0分页控件 v2.0.0.2版本。
- 【开源】我的分页控件正式命名为QuickPager ASP.NET2.0分页控件
- 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.1——分页控件的源码 (二)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法