使用ORM有一个优势,可以通过某种机制将数据库中的数据转化为自己想要的对象形式数据。本章记录一下如何使用Git.Framework返回实体对象

  一. Git.Framework 中提供的方法

    在Git.Framework中有七个方法可以返回实体对象,先简答的看看这里的方法描述

(1) T GetSingle(int id);
(2) T GetSingle(object value);
(3) T GetSingle(T entity);
(4) V GetSingle<V>(T entity) where V : class, new();
(5) T GetSingle(int id, bool isOpenTrans);
(6) T GetSingle(T entity, bool isOpenTrans);
(7) V GetSingle<V>(T entity, bool isOpenTrans) where V : class, new();

    上面总共提供了七个方法用来查询一个实体对象,当然数据库中没有响应的记录则返回为null。

T GetSingle(int id);

    T 是使用的泛型,前面也介绍到了T使用泛型约束必须继承自BaseEntity。 实体中必须有和返回数据列相对应的列才可以获取其值. 如果数据库中表示使用自动标识列作为主键可以使用此方法来查询一个实体对象。

T GetSingle(object value);

    这个方法和上面的一样,感觉有点鸡肋,暂且不用过多的去考虑,这个方法就是根据主键来查询实体对象,不支持联合主键.

T GetSingle(T entity);

    这个方法比较智能一点,可以自定义返回列的数量以及查询的条件,应该属于适用最多的这种情况

V GetSingle<V>(T entity) where V : class, new();

    这个方法和上面一个其实是一样的,在前面提到过了T适用了泛型约束,而V在这里也是用了泛型约束是一个类,并且必须提供构造函数. T 实际上对应数据库中的一个表,而V不一定对应数据库中的表,其对象属性可以自定义的,只要数据库查询返回的列中存在于这个对象属性中,那么就可以将值付给它。

    至于后面一个方法完全是鸡肋,这里不用多说了。

  二. 查询方法案例

    函数1: T GetSingle(int id);

AdminEntity entity = this.Admin.GetSingle();

    上面的这段代码返回返回Admin表中主键为1 的这一行数据的所有值.

    函数2: T GetSingle(T entity)

AdminEntity entity = new AdminEntity();
entity.Include(a => new { a.ID, a.UserCode, a.UserName, a.PassWord, a.Email, a.Phone, a.Mobile, a.RealName, a.RoleNum, a.DepartNum });
entity.Where(a => a.UserCode == userCode);
entity = this.Admin.GetSingle(entity);
return entity;

    上面的代码看过前面几张的应该也见怪不怪了, 返回数据库表中的指定列,并且满足一定的要求,也就是筛选条件. 但是有时候筛选条件是返回多行数据的,这里只会读取第一行,其余行的数据不会做处理。

    函数3: V GetSingle<V>(T entity) where V : class, new();

AdminEntity entity = new AdminEntity();
entity.Include(a => new { a.ID, a.UserCode, a.UserName, a.PassWord, a.Email, a.Phone, a.Mobile, a.RealName, a.RoleNum, a.DepartNum });
entity.Where(a => a.UserCode == userCode);
//entity = this.Admin.GetSingle(entity);
Git.Storage.Entity.Store.CustomerEntity cus = this.Admin.GetList<Git.Storage.Entity.Store.CustomerEntity>(entity);
return entity;

    在对象CustomerEntity中有表Admin相同字段的映射,我们查询的时候就不一定要使用返回AdminEntity,可以使用其他的对象来接收返回值数据。

  三. 返回数据行数

    在数据库中行使用到count() 行数,用于筛选数据有多少行,在Git.Framework中提供了几个函数专门来处理数据行的问题。

int GetCount();
int GetCount(bool isOpenTrans);
int GetCount(T entity);
int GetCount(T entity, bool isOpenTrans);

    int GetCount(); 用于该表中的所有数据行数.

    int GetCount(T entity); 这个函数用于返回特定的筛选条件的数据行数

    另外的两个函数是鸡肋,你可以不用理他们,留之无碍,舍之可惜。

AdminEntity entity = new AdminEntity();
int count = this.Admin.GetCount();

    上面代码是返回表Admin中的所有数据行数,没有数据返回0

AdminEntity entity = new AdminEntity();
int count = this.Admin.GetCount(entity);

    上面的代码没有使用任何条件,结果也是查询该表的所有的数据行

AdminEntity entity = new AdminEntity();
entity.Where(a => a.UserCode == userCode);
int count = this.Admin.GetCount(entity);

    这段代码和上面的是一样的,只是带了相应的条件而已,返回筛选的数据行

  四. 聚合函数

    聚合函数在SQL中是不得不说的,在Git.Framework 中提供了几个简单的几何函数方法映射

V Max<V>(T entity);
V Max<V>(T entity, bool isOpenTrans);
V Min<V>(T entity);
V Min<V>(T entity, bool isOpenTrans);
V Sum<V>(T entity);
V Sum<V>(T entity, bool isOpenTrans);

    聚合函数大家懂的,和上面的Count()使用的方法是一样,这个里面也提供了一些鸡肋的方法,索然无味!这里不贴使用实例了。

Git.Framework 框架随手记--ORM查询返回实体对象的更多相关文章

  1. Git.Framework 框架随手记--ORM查询数据集合 二

    一.  分组查询 在SQL中使用Group By 来对数据分组,在实际中分组中一般与聚合函数一并使用.在Git.Framework中提供了相应的分组方法 DataTable Group(T entit ...

  2. Git.Framework 框架随手记--ORM查询数据集合 一

    本文记录Git.Framework之ORM中最为浓墨重彩的一篇,查询集合.根据自己做的项目统计这个是使用频率最高的一个. 一. 查询集合方法简介 (1)List<T> GetList(); ...

  3. Git.Framework 框架随手记--ORM条件组合

    在上一篇<Git.Framework 框架随手记--ORM新增操作>中简单记录了如何对数据进行删除和修改,其用法都非常简单,在文章中提到了Where()方法,本文将详述Where() 等条 ...

  4. Git.Framework 框架随手记--ORM编辑删除

    前面一篇文章<Git.Framework 框架随手记--ORM新增操作>主要讲解了如何使用Git.Framework往数据库中添加数据.其操作过程相对简单,本章主要记录如何编辑数据和修改数 ...

  5. Git.Framework 框架随手记--ORM项目工程

    前面已经简单介绍过了该框架(不一定是框架),本文开始重点记录其使用过程.可能记录的内容不是太详尽,框架也可能非常烂,但是里面的代码句句是实战项目所得.本文非教唆之类的文章,也非批判之类的文章,更不是炫 ...

  6. Git.Framework 框架随手记--ORM新增操作

    本篇主要记录具体如何新增数据,废话不多说,开始进入正文. 一. 生成工程结构 上一篇已经说到了如何生成工程结构,这里在累述一次. 1. 新建项目总体结构 使用VS新建项目结构,分层结构可以随意.我们使 ...

  7. Git.Framework 框架随手记--存储过程简化

    在很多的ORM中对存储过程操作都是一个棘手的地方,因为存储过程是一段预编译的代码,其中可以包含很多处理过程.在Git.Framework中也同样存在这样的问题,目前没有能力解决这个问题.但是对于存储过 ...

  8. Git.Framework 框架随手记--历史原因

    Git.Framework 是近几年工作的一些工作经验总结,虽不能和某些知名的框架相提并论,但是还是比较实用的.此框架经过三年多的升级和维护,已经具有较强的实用性,在此记录该框架的使用操作方式,贡献给 ...

  9. Git.Framework 框架随手记-- 分享一个"比较垃圾"的项目

    本文主要分享一个Git.Framework 开发的一个项目的部分源码,此项目代码"比较垃圾",所以请各位码农,码畜,码神,码圣勿喷!发此文只为记录工作问题以及分享问题! 一. 项目 ...

随机推荐

  1. redis AOF保存机制

    网上说AOF有三种保存方式,不自动保存.每秒自动保存.每命令自动保存. 其中每秒自动保存这个看起来很美好,但是可能会被各种IO的时间所延迟,所以究竟是怎么判断每秒保存的,并不是太明白,故有此文. AO ...

  2. Eclipse中使用Working Set来管理项目

    Eclipse作为一款流行的JavaIDE开发工具,其有很多好用的功能为我们的开发提供帮助.但我们的工作空间中有很多项目时,管理起来就很头疼了. 但是我们又不想更换工作区间,所以我们需要一个更加有效的 ...

  3. 2014年小结之sql语句优化

    之前接手一个数据统计处理的小程序,本来逻辑上并没什么,只是数据量略大,某些表的数据达到了千万级别..因为是统计,所以免不了各种连接各种查询,结果这个小程序写完后运行一次要1个小时..这的确有点出乎意料 ...

  4. Hive Word count

    --https://github.com/slimandslam/pig-hive-wordcount/blob/master/wordcount.hql DROP TABLE myinput; DR ...

  5. runc kill 和 delete流程分析

    runc kill // kill sends the specified signal (default: SIGTERM) to the container's init process 1.ru ...

  6. 分享十个JavaScript在线调试工具

    测试Javascript可能是网页开发中最让人忧伤的工作.这里我找一些比较好的工具来帮助大家进行测试工作.这10款是我精选的基于浏览器的JavaScript在线调试工具,希望你们对你们有用. 1.Op ...

  7. c查漏补缺

    restrict 要理解什么是restrict,首先要知道Pointer aliasing:指两个或以上的指针指向同一数据,例如: ; int *a = &i; int *b = &i ...

  8. Java虚拟机详解01----初识JVM

    主要内容如下: JVM的概念 JVM发展历史 JVM种类 Java语言规范 JVM规范 一.JVM的概念: JVM: Java Virtual Machine,意为Java虚拟机. 虚拟机: 指通过软 ...

  9. Cg关键字(keywords)

    保留标识符 除了下面列出的,任何以两个的下划线作为前缀(例如,__ newType)的标识符被保留. 注意,矩阵(matrix)和向量类型(vector types)(如half2x3或float4) ...

  10. java 21 - 10 文本文件和集合之间互相存储数据

    有时候,我们会遇到单独写入数据到文本文件的情况.比如: 需求:把ArrayList集合中的字符串数据存储到文本文件 分析: A:ArrayList集合中存储的是String类 B:要存储的文件是文本文 ...