一步步实现自己的ORM(二)】的更多相关文章

在第一篇<一步步实现自己的ORM(一)>里,我们用反射获取类名.属性和值,我们用这些信息开发了简单的INSERT方法,在上一篇文章里我们提到主键为什么没有设置成自增长类型,单单从属性里我们无法识别哪个是主键,今天我们用Attribute来标识列,关于Attribute,引用MSDN里描述      MADN的定义为:公共语言运行时允许添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法和属性等.Attributes和Microsoft .NET F…
章节列表: <一步步实现自己的ORM(一)> <一步步实现自己的ORM(二)> 通过前面两篇文章,我们大致了解了ORM的基本原理,是通过Attribute+反射获取表的基本信息,再用表名和字段名拼接成SQL语句.而前面我们只是完成了CRUD部分的CUD,还没完成读取(Retrieve)操作,今天就来完成这个R操作.我们先看下平时写实体类转换代码是怎么写的: static List<User> ToObject1() { SqlDataReader reader = nu…
最近在研究ORM,尝试着自己开发了一个简单的ORM.我个人不喜欢EF因为跟不上EF升级太快了,再说公司里还停留在c# 3.5时代,对于NHibernate配置太复杂看到就头晕,就心生自己做一个ORM的念头,现在把开发过程中的点点滴滴记录下来,供自己和新手参考,大神请直接忽略这篇文章. ORM(object relation mapping)对象关系映射,常用来映射数据库里表.字段等信息.ORM的原理无非就是用配置文件.Attribute来映射数据关系.我们一步步来来创建ORM,定义一个实体类,然…
一.ORM简介         对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中.那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法.         这种方案存在以下不足:         1.持久化层缺乏弹性.一旦出现业务需求的变更,就必须修改持久化…
数据库表结构生成完毕后,可以使用工具连接上去 在 app01_author 表创建基础记录 在 app01_publisher 表创建基础记录 添加 data_oper 方法 在 urls.py 文件上添加 from app01 import views urlpatterns = [ .... path('data_oper/', views.data_oper), ] ORM 增加方法 create 方式一 在 views.py 文件上添加 from django.shortcuts imp…
一.安装IAR for ARM6.5 二.新建工程 1.选择处理器:STM32F407VG,暂不使用FPU 2.必要的路径配置和宏定义 3.使用SWO重定向IO输出 4.使用ST-LINK仿真器 5.下载配置 6.设置CPU频率,防止SWO输出乱码 三.代码调试 四.工程下载 stepbystep_stm32_os_template.rar…
一.基本概念 1.数据库: 数据库(DataBase)就是一个存储数据的仓库,为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上.通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据.数据库是数据管理软件.数据存储分为三个阶段:人工管理阶段.文件系统阶段和数据库系统阶段. 2.数据库范式: 数据库范式即数据库应该遵循的规则.目前关系数据库最常用的四种范式分别是:第一范式(1NF).第二范式(2NF).第三范式(3NF).BCN范式(BCNF). 第一范式:无重复的域.即数据库表…
上一张优化了ORM的INSERT.UPDATE.DELETE,但将数据库里的值填充到实体类这块还没优化.另外有博友在网上咨询说你这个都是查询所有字段的,而他的需求是按需查询字段,不是一次性取出来所有字段的,在这里我请这位朋友耐心等待,这个会在后面章节提到的.这次我们先优化datareader->entity,将数据库里的值Mapping到实体类里,我们常用的有两种办法第一种是采用EMIT方式,第二种是采用Expression tree表达式,这两种方案在性能上差异不大,但写法上第二种较第一种比较…
通过前3章文章,大致对ORM有一定的了解,但也存在效率低下(大量用了反射)和重复代码,今天我们要对ORM进行优化. 具体流程如下: 我们优化的第一个就是减少反射调用,我的思路是定义一个Mapping,把表名.字段名信息缓存起来,EntityMapping 表示实体类信息对应数据库中的table,MemberMapping表示实体类的属性对应数据库中的Column. EntityMapping代码: class EntityMapping { /// <summary> /// 对应实体类类型…
1 关系映射 1 多对多 1 什么是多对多 A表中的一条数据可以与B表中任意多条数据相关联 B表中的一条数据可以与A表中任意多条数据相关联 2 实现 在数据库中使用第三张表(关联表) 在编程语言中,可以不编写对应的实体类 1 创建第三张表 student_course = db.Table( 'student_course',# 在数据库中的表名 db.Column('id',db.Integer,primary_key = True), db.Column('student_id',db.In…