ORM知多少
来源:互联网 发布:淘宝卖家不可以更新 编辑:程序博客网 时间:2024/05/17 01:12
前言
公司的项目中都涉及到ORM(Object Relational Mapping)框架,EF映射、Hibernate、Mybatis、JPA……不断涌现的新鲜词语,面试的时候面试官还在说EFframework(有木有很奇怪),那就来一探究竟吧。
一、ORM的由来
采用ORM之前,程序员采用JDBC作为数据访问层,虽然JDBC是跨平台的,但是在使用中仍然存在一些问题:
- 代码繁琐,容易出错
程序员需要耗费大量的时间、精力去编写具体的数据库访问语句,还要担心大量重复的代码中是否有遗漏,并不能集中精力于业务逻辑开发上面。 - 可维护性低
关系数据对象之间,存在各种关系,包括1对1、1对多、多对1、多对多、级联等,在数据库对象更新时,如果采用JDBC编程,程序员必须十分小心处理这些关系,在后期维护的时候也是很痛苦的。 - 层次划分不明确
使用JDBC编程时,程序员必须知道后台用的是什么数据库、要操作哪些表、表中都有哪些字段、字段类型、表间的关系等,每个程序员除了关注业务逻辑的同时还在兼职DBA的工作。 - 性能低
But—
ORM通常更容易开发跨平台的应用程序。
ORM是对JDBC的封装,解决了使用JDBC出现的上述问题。
二、什么是ORM
ORM是Object Relation Mapping ,即对象关系映射,是对象持久化的核心,为了解决面向对象与关系数据存在的互不匹配的技术,通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
简单的说,ORM在关系型数据库和业务实体对象之间做了一个映射,程序员将对数据库的操作转化成对对象的操作,避免了直接和复杂的sql语句打交道,只需操作业务对象即可实现对数据库的操作。
ORM的组成:
一个对持久类对象进行CURD操作的API;
一个语言或API用来规定与类和类属性相关的查询;
一个规定mapping metadata的工具;
一种技术可以让ORM的实现同事务对象一起进行dirty checking,lazy association fetching以及其他的优化操作。
常见的ORM框架:
.NET —— entity framework 、Linq to Sql
Java —— Hibernate、Mybatis、TopLink
三、项目中ORM的应用
1、声明一个上下文StudentManagerEntities DBcontext = new StudentManagerEntities2、声明一个实体Student st = new Stuendent();st.name="Tracy";st.tel="8888888";st.email="888888@126.com";st.id="13070141070";3、通过上下文对实体操作,比如CRUD//添加操作DBcontext.Student.Add(st);4、将实例的变化保存在数据库中DB.context.SaveChanges();
四、ORM与数据持久化的关系
数据持久化:将内存中的数据模型转换成存储模型,以及将存储模型转换为内存中的数据魔性的统称。数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。
ORM是一个数据持久化框架,实现了JPA接口。
五、ORM的应用场景
1、对性能要求不是很高的时候
2、开发时间紧迫
3、数据库有迁移需求的时候
总结
学习的过程是从陌生到熟悉的过程,在做项目的过程中虽然自己也接触过EF映射的东西,只是停留在会用的基础上,总结和思考的时候对它的发展及应用有了更进一步的认识,继续加油!
- ORM知多少
- ORM
- ORM
- ORM
- ORM
- ORM
- ORM
- ORM
- ORM
- ORM
- ORM
- ORM
- ORM
- ORM
- ORM
- ORM
- ORM
- ORM
- Python中的string模块的学习
- 我带你去哪里 XII
- Java排序算法-直接插入排序
- 匹配追踪算法进行图像重建
- openCV Python学习笔记(一)图片的读入,显示与保存
- ORM知多少
- eclipse_svn客户端插件site-1.10.13-1.9.x、site-1.12.x不存在
- 前端ajax,后台java+springmvc实现异步表格局部刷新分页
- 机器学习-GridSearchCV自动调参,RF特征选择
- 开源组件剖析:ShimmerAndroid
- 死锁产生的原因及必要条件
- WebUI自动化 selenium+testng+java环境搭建及问题汇总(一)
- windows编译ACE_6.4.5中ACE的x64静态库时x86与x64冲突
- mysql配置文件