orm框架

ORM原型概念

梦想的初衷 提交于 2020-03-05 01:25:34
ORM[Object-Relation-Mapping]对象关系映射. 这个名词已经出来好几年了.已经不陌生. 以前在项目中针对相对复杂业务逻辑时一般采用领域模型驱动方式进行业务概述,分析和建模. 其中在设计阶段我第一次接触ORM这个概念. 针对实际项目中ORM 采用的是Nhibernate实现底层数据持久化. 当然现在ORM成熟的工具已经很多了. 本篇的目的结合以往实际编程经验.系统整理ORM原型概念. <1>什么是ORM? 解释这个名词并不难.先了解一下ORM由来. 其实ORM的需求真正由来是在随着面向对象OO编程开发方法发展而产生的. 如今面向对象[Object]的OO编程已经成为企业级开发中主流开发方法. 而关系型数据库也成为企业级应用环境中永久存放数据的主流数据存储系统. 其实到这你应该明白. 同样的数据一个是在实际编程中一Object面向对象方式体现, 而另外一种就是把这种内存对象持久化存储到硬盘文件上. 由此可以说对象[Object]和关系数据是业务实体的 两种不同表现形式.业务实体Object在内存中表现为对象,在数据库中表现为关系数据. 内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射. 这时有人会问为什么需要ORM?

JPA和Spring-Data-JPA简介

时光总嘲笑我的痴心妄想 提交于 2020-03-05 00:41:05
什么是JPA JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合ORM技术 ORM:通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。本质就是将数据从一种形式转换到另外一种形式。 结束现在Hibernate、TopLink等ORM框架各自为营的局面。JPA是在充分吸收了现有Hibernate、TopLink等ORM框架的基础上发展起来的,具有易于使用,伸缩性强等优点。 注意: JPA不是一种新的ORM框架,它的出现只是用于规范现有的ORM技术,它不能取代现有的Hibernate等ORM框架,相反,采用JPA开发时,我们仍将使用这些ORM框架,只是此时开发出来的应用不在依赖于某个持久化提供商。应用可以在不修改代码的情况下载任何JPA环境下运行,真正做到低耦合,可扩展的程序设计。类似于JDBC,在JDBC出现以前,我们的程序针对特性的数据库API进行编程,但是现在我们只需要针对JDBC API编程,这样能够在不改变代码的情况下就能换成其他的数据库。 JPA是一套规范,不是一套产品。Hibernate是一套产品,如果这些产品实现了JPA规范,那么我们可以叫它们为JPA的实现产品。使用JPA

自定义ORM框架【菜鸟入门日记1——前期准备】

会有一股神秘感。 提交于 2020-03-04 05:21:00
作为一只菜鸟,练习自定义框架,并不是为了写框架,而是为了更好得学习框架。 一、基础工作 1.建包 annotation 注解包,用于自定义注解 core 核心代码包,包括会话工厂、SQL执行 execption 自定义框架的异常体系(对于初学者阶段,其实没啥用,就当提升下逼格了) meta 对象关系映射,负责映射实体类与表的映射,属性名与字段的映射 session与sessionImpl 会话包以及会话实现包 support 支持包,可以理解为工具包,为框架提供各种小工具 model 实体包,【只是用于测试,最后不会导出】 test 测试包,【只是用于测试,最后不会导出】 什么叫做“最后不会导出”:我们编写的自定义ORM框架,最后会被封装成一个jar包,可以让我们在其他项目中使用。 其余操作: src根目录下的配置文件 orm.properties【只是用于测试,最后不会导出】 lib包下的mysql JAR包,用于配置JDBC【只是用于测试,最后不会导出】 orm.properties 2.项目结构总览 3.大致思路 本ORM框架,通过注解实现。通过会话工厂,开启会话,对数据库进行操作。 难点1:扫包。通过配置文件orm.properties,指定实体类存放的位置,即model包的位置。用support包中的PackageSanner,进行扫描,得出所有实体类的字节码文件。

ORM框架 之 Entity Framework

∥☆過路亽.° 提交于 2020-03-02 11:43:30
Entity Framework 1.ADO.NET Entity Framework是以ADO.NET为基础所发展出来的对象关系对应(O/R Mapping)解决方案,早起被称为ObjectSpace,最新版本是EF6.0[CodeOnly功能得到了更好的支持] 2.实体 框架Entity Framework是ADO.NET中一组支持开发面向数据的软件应用程序技术,是微软的一个ORM框架 什么是O/R Mapping框架 1.广义上:ORM 指的是面向对象模型和关系型数据库的数据结构之间的相互转换 2.狭义上:ORM基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口。基于这样一个面向对象的接口,持久化一个oo对象应该不需要了解任何关系型数据库存储数据的实现细节 3.在原来的ado,net时,用到dataAdrapt 或者read()时,得到的实际是弱类型,因为他们都是不知道字段的实际类型,只能通过名称来得到,而ORM框架则是把数据库中的表能在模型中实际体现出来也就是强类型 4.ORM思想:表实体和表的相互转化。 5.实际上(1)把表实体的变化转化到数据库里面去。(2)把表数据转成表实体 来源: https://www.cnblogs.com/zmztya/p/7324948.html

Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库上下文

流过昼夜 提交于 2020-02-28 04:56:36
导航 目 录: Farseer.net轻量级ORM开源框架 目录 上一篇: Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置文件 下一篇: Farseer.net轻量级ORM开源框架 V1.x 入门篇:表实体类映射 前言   上文讲述了数据库配置使用,搭建好数据库的链接方式了我们知道怎么做了。   事实上,至今我们仍然还没有讲到代码方面,花了前面这么多篇幅讲解,主要是想由浅入深,不然一上来给大家讲解这讲解那的,听的也一头雾水,反而得不到效果。   这篇比较重要,因为它是我们在使用Farseer.Net时最基础的类: DbContext (与EntityFramework的DbContext一个概念) 数据库上下文   从字面上,我们就知道:它是我们程序(业务)与数据库之间的沟通桥梁,在对表(实体类)进行CURD时,需要让实体类知道,我需要访问哪种数据库。   而数据库上下文,就是告诉我们的实体类,应该对哪个数据库类型进行连接访问。   在Farsser.Net里,数据库上下文对应的类便是: DbContext , 这便是需要我们继承它,然后在这个类里面,封装我们需要的实体类的属性。 构造函数 /// <summary> /// 通过数据库配置,连接数据库 /// </summary> /// <param name="dbIndex">数据库选项<

(15)模型层-什么是ORM

吃可爱长大的小学妹 提交于 2020-02-28 03:44:15
ORM是什么 1、MVC或者MTV框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动 2、ORM是“对象-关系-映射”的简称 作用是什么:查询数据层次图解,如果操作mysql,ORM是在pymysq之上又进行了一层封装,就是将我们输入的orm对象方法转成mysql的语法去执行数据库,获得数据库的数据在中间的orm转换成对象,完成前后端的交互 PS:所有语言都有orm,不是python独有的 pyhon中主流的orm框架 Django's ORM 优点: 易用,学习曲线短 和Django紧密集合,用Django时使用约定俗成的方法去操作数据库 缺点: 不好处理复杂的查询,强制开发者回到原生SQL 紧密和Django集成,使得在Django环境外很难使用 peewee 优点: Django式的API,使其易用 轻量实现,很容易和任意web框架集成 缺点: 多对多查询写起来不直观 SQLAlchemy 优点: 企业级 API,使得代码有健壮性和适应性 灵活的设计,使得能轻松写复杂查询 缺点: 重量级 API,导致长学习曲线 其它:SQLObject 、Storm 、、、、 来源: https://www.cnblogs

手写一个简易版的ORM

允我心安 提交于 2020-02-28 03:43:03
ORM简介 ORM即 Object Relational Mapping,全称对象关系映射 。 当我们需要对数据库进行操作时,势必需要通过连接数据、调用sql语句、执行sql语句等操作,ORM将数据库中的表,字段,行与我们面向对象编程的类及其方法,属性等一一对应,即将该部分操作封装起来,程序猿不需懂得sql语句即可完成对数据库的操作。 Python中常用ORM框架 Django's ORM 优点: 1. 易用,学习曲线短 2. 和Django紧密集合,用Django时使用约定俗成的方法去操作数据库 缺点: 1. 不好处理复杂的查询,强制开发者回到原生SQL 2. 紧密和Django集成,使得在Django环境外很难使用 peewee 优点: 1. Django式的API,使其易用 2. 轻量实现,很容易和任意web框架集成 缺点: 1. 多对多查询写起来不直观 SQLAlchemy 优点: 1. 企业级 API,使得代码有健壮性和适应性 2. 灵活的设计,使得能轻松写复杂查询 缺点: 1. 重量级 API,导致长学习曲线 其它:SQLObject 、Storm 、、、、 原生操作数据库模块pymysql pymysql模块 ORM框架之SQLAlchemy MySQL 第八篇:ORM框架SQLAlchemy 手把手带你写一个自己的ORM框架 手写ORM 来源: https:/

国内开源ORM组件 ELinq正式版发布

大兔子大兔子 提交于 2020-02-23 11:11:36
前言:    自从发布 年度开源力作-国产ORM框架ELinq诞生了 这篇博文后,得到了很多园友的支持,另外 ELinq 群:271342583群的群友也非常活跃,大家一起为该框架起了一个响亮的名字: ELinq (之前为 NLite.Data ),另外一些网友建议的新特性,比如支持类似EF框架的DbContext,可以直接继承DbContext,而不需要手工实现Dispose,可以直接定义DbSet类型的成员属性,而不需要手工对其赋值,增加在调试时可以直接方便的看到Sql内容,而不是通过日志,可以方便的查看SQL的参数等等,为了快速的回馈广大网页的支持特发布该版本表示感谢! 更新日志:     ELinq 0.4 2012/12/8 发布: 1. 组件名称由NLite.Data 改为ELinq,命名空间没变,保持良好的向下兼容性 2. 开放DbContext 类,使其允许被直接继承,简化ELinq使用DbContext的复杂度 3. 开放DbSet 的SqlText和ExecutePlan 属性接口,方便DbSet在运行时方便的调试,可以直接查看SQL和执行计划 NLite.Data 2012-12-3 RC2 发布 1. 修复通过HashTable进行删除的Bug 2. 支持通过connectionString 和providerName 作为参数来配置 3. 使MySQL

Sprng Data JPA与hibernate的关系

夙愿已清 提交于 2020-02-23 09:59:47
1.ORM 概述 ORM ( Object-Relational Mapping ) 表示对象关系映射。在面向对象的软件开发中,通过 ORM ,就可以把对象映射到关系型数据库中。只要有一套程序能够做到建立对象与数据库的关联,操作对象就可以直接操作数据库数据,就可以说这套程序实现了 ORM 对象关系映射 简单的说: ORM 就是建立实体类和数据库表之间的关系,从而达到操作实体类就相当于操作数据库表的目的。 1.1 为什么使用 ORM 当实现一个应用程序时(不使用 O/R Mapping ),我们可能会写特别多数据访问层的代码,从数据库保存数据、修改数据、删除数据,而这些代码都是重复的。而使用 ORM 则会大大减少重复性代码。对象关系映射( Object Relational Mapping ,简称 ORM ),主要实现程序对象到关系数据库数据的映射。 1.2 常见 ORM 框架 常见的 orm 框架: Mybatis ( ibatis )、 Hibernate 、 Jpa 2.hibernate 与 JPA 的概述 [ 了解 ] 2.1 hibernate 概述 Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,它将 POJO 与数据库表建立映射关系,是一个全自动的 orm 框架, hibernate 可以自动生成 SQL 语句

微软跨平台ORM框架之EFCore — 约定与属性映射

混江龙づ霸主 提交于 2020-02-13 18:58:09
EFCore中的约定简单来说就是规则,CodeFirst基于模型的约定来映射表结构。除此之外还有Fluent API、Data Annotations(数据注释) 可以帮助我们进一步配置模型。 按照这三者的优先级高低排序分别是:Fluent API、Data Annotations(数据注释)、约定。 1.约定 public class Person { public int ID { get; set; } public int Age { get; set; } public bool Status { get; set; } public string Name { get; set; } public DateTime CreateTime { get; set; } } 1.1 主键约定 我们有这样的一个Person类, 在实体中如果有名为ID的字段,或者实体名+ID的字段如:PersonID,那么EFCore生成的表会自动标识为主键。并且如果它的类型是int或Guid则会默认自增长。 映射之后的表结构: 我们可以看到C#中的int、bool、string、datetime,分别映射为 int,bit,navarchar(MAX),datetime2(7)。这是因为EFCore的默认约定是这么规定的。道友们可能会想自定义的映射,比如把string映射会varcher