轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)
轻量级ORM框架QX_Frame.Bantina系列讲解(开源)
一、框架简介 http://www.cnblogs.com/qixiaoyizhan/p/7417467.html
二、框架使用方式介绍 http://www.cnblogs.com/qixiaoyizhan/p/7418058.html
三、框架性能对比 敬请期待
【前言】
上一节我们对Bantina ORM框架进行了简单的说明介绍,在这一节中,我们将对Bantina框架的使用方式进行说明。
下面我们对Bantina 1.0 使用方式做详细介绍。
介绍之前,我们先在本地创建一个数据库,作为演示使用实例以及数据库查询对比的操作对象,该数据库结构如下图所示:

数据库名:DB_QX_Frame_Test
其中包含三张表:TB_ClassName (班级名称)
TB_People (人员表)
TB_Score (分数表)
表之间的关系是TB_People中有TB_ClassName的外键
【框架使用方式简介】
我们通过Bantina1.0 ORM框架对测试表数据的增删改查来实现对框架的使用介绍。
首先需要引用对应的dll类库 QX_Frame.Helper,类库多种获取方式在每篇介绍的最下面获取方式中有说明介绍。
Nuget方式获取:打开Nuget包搜索器,搜索 QX_Frame.Helper,然后选择版本2.0.0 安装即可(1.0.0不包含Bantina框架)

项目中引用命名空间
using QX_Frame.Helper_DG.Bantina;
将上述表转化成对应的实体,这里可以手动写,也可以联系本人获取代码生成器进行生成。(主外键关系要配置好,查询时候需要)
public class DB_QX_Frame_Test : Bantina
{
public DB_QX_Frame_Test() : base("data source=.;initial catalog=DB_QX_Frame_Test;persist security info=True;user id=Sa;password=Sa123456;MultipleActiveResultSets=True;App=EntityFramework") { }
}
[Table(TableName = "TB_People")]
public class TB_People
{
[Key]
public Guid Uid { get; set; }
[Column]
public string Name { get; set; }
[Column]
public int Age { get; set; }
[Column]
[ForeignKey]
public int ClassId { get; set; }
[ForeignTable]
public TB_ClassName TB_ClassName { get; set; }
}
[Table(TableName = "TB_ClassName")]
public class TB_ClassName
{
// PK(identity)
[Key]
public Int32 ClassId { get; set; }
//
[Column]
public String ClassName { get; set; }
}
1、添加数据方法Add
实例化一个TB_People对象,然后对对象的属性进行赋值。
实例化数据库实体上下文,然后调用异步方法Add(),将实体添加进去。
判断异步返回结果,如果添加成功,返回Success!
TB_People people = new TB_People ();
people.Uid = Guid.NewGuid();
people.Name = ";
people.Age = ;
people.ClassId = ;
using (DB_QX_Frame_Test test = new DB_QX_Frame_Test())
{
if (test.Add(people).Result)
{
Console.WriteLine("insert success !");
}
}

启动调试执行该方法
原数据库记录:


执行后数据库记录:

很简单的操作,我们将该条目插入了数据库。
我们可以在数据库上下文的对象的属性中看到执行的sql语句

2、查询单条实体QueryEntity
为什么我们不先讲Update和Delete,因为我们的Update和Delete操作是先查询确定要操作的对象后再执行对应的修改删除方法,因此我们先讲查询操作。
查询单条我们可以直接调用对应的查询单条实体方法,并用Lambda方式传入查询条件进行查询:
using (DB_QX_Frame_Test test = new DB_QX_Frame_Test())
{
TB_People people = test.QueryEntity<TB_People>(t => t.Name.Contains("));
Console.WriteLine($"uid = {people.Uid} , Name = {people.Name} , ClassName = {people.TB_ClassName.ClassName}");
}

查询一条Name包含55的数据,如果有多条,会自动匹配第一条。
执行上述代码:
数据库原纪录:


执行结果:

通过主外键关联的记录也可以被查询到。
我们可以在数据库上下文的对象的属性中看到执行的sql语句:

3、查询多条记录List->QueryEntities
查询多条我们可以直接调用查询多条的方法QueryEntites方法。该方法有多个重载,根据不同的业务需求进行不同的选择。
using (DB_QX_Frame_Test test = new DB_QX_Frame_Test())
{
List<TB_People> peopleList = test.QueryEntities<TB_People>();
foreach (var item in peopleList)
{
Console.WriteLine($"uid = {item.Uid} , Name = {item.Name} , ClassName = {item.TB_ClassName.ClassName}");
}
}

我们执行上述的查询方法:
数据库原纪录:

执行后的结果:

通过主外键关联的记录也可以被查询到。
我们可以在数据库上下文的对象的属性中看到执行的sql语句:

4、分页查询List->QueryEntitiesPaging
分页查询和查询全部记录很相似,只要传入分页查询的参数即可。
using (DB_QX_Frame_Test test = new DB_QX_Frame_Test())
{
List<TB_People> peopleList = test.QueryEntitiesPaging<TB_People, , , t => t.Name, t => t.Age == , out int count, true);
foreach (var item in peopleList)
{
Console.WriteLine($"uid = {item.Uid} , Name = {item.Name} , ClassName = {item.TB_ClassName.ClassName}");
}
}

我们执行上述的查询方法:
数据库原纪录:

查询后的结果如下:

当前方法传递的参数说明:
QueryEntitiesPaging<TEntity, TKey>(int pageIndex, int pageSize, Expression<Func<TEntity, TKey>> orderBy, Expression<Func<TEntity, bool>> where, out int count, bool isDESC = false)
我们传递了一个pageIndex、pageSize、orderBy、where查询条件,以及数据库总数的一个out参数;
通过主外键关联的记录也可以被查询到。
我们可以在数据库上下文的对象的属性中看到执行的sql语句:

SELECT TOP 2 * FROM (SELECT ROW_NUMBER() OVER (ORDER BY t.Name DESC ) AS RowNumber,* FROM TB_People t where (t.Age = 3)) AS TTTAAABBBLLLEEE WHERE RowNumber > (2 * (1 - 1))
5、修改操作Update
修改操作我们可以先查询待操作的对象,然后对对象进行修改操作。也可以直接使用lambda表达式传递修改条件进行修改。
using (DB_QX_Frame_Test test = new DB_QX_Frame_Test())
{
TB_People people = test.QueryEntity<TB_People>(t => t.Name.Contains("));
Console.WriteLine($"uid = {people.Uid} , Name = {people.Name} , ClassName = {people.TB_ClassName.ClassName}");
people.Age = ;
if (test.Update(people).Result)
{
Console.WriteLine("update success !");
}
}

我们将Name包含55的第一条记录的年龄改成55.
我们执行上述的查询方法:
数据库原纪录:

执行结果:

然后查看执行后的数据库记录:

可以看到,数据已经被成功修改。
通过数据库上下文对象我们来查看执行的sql语句:

上述方法是默认根据主键进行修改,也就是说不支持主键的修改,如果想要得到主键修改的支持,请调用重载方法进行修改:

当然,如果是自增字段,那么会自动跳过修改环节。
6、删除操作Delete
删除操作我们可以先查询待操作的对象,然后对对象进行删除操作,也可以直接使用lambda表达式传递删除条件进行删除。
using (DB_QX_Frame_Test test = new DB_QX_Frame_Test())
{
TB_People people = test.QueryEntity<TB_People>(t => t.Name.Contains("));
people.Age = ;
if (test.Delete(people).Result)
{
Console.WriteLine("delete success !");
}
}

我们将Name包含55的第一条记录进行删除操作.
我们执行上述的查询方法:
数据库原纪录:

执行结果:

然后查看执行后的数据库记录:

可以看到,数据已经被成功删除。
通过数据库上下文对象我们来查看执行的sql语句:

上述方法是默认根据主键进行修改,如果我们想要快捷地进行对应条件的删除,那么我们可以直接使用lambda表达式传递where条件进行修改,不需要先进行查询操作。

7、原生Sql查询方式支持
Bantina框架支持原生Sql语句的执行方式,有操作和查询两种方式,还保留了存储过程执行接口。(使用泛型便于直接将结果转化成对应的集合)

我们在这里简单执行一条查询集合的sql语句:

查询结果:

在这里需要说明的是,这里不会直接对关联外键表进行查询,我们这里查询传入的泛型T和表查询的结果必须是一一对应的,因此,我们可以实现配置DTO数据传输对象去匹配查询的结果集。
并不是不能实现关联查询,是为了保持sql查询的灵活性的特点没有加相应功能。
到这里,我们大部分的基础功能操作已经演示完毕,已经可以满足我们大部分的业务需求。
关于我们Bantina ORM 实体框架的性能介绍我们会放在下一章进行和其他常用ORM框架作为对比展示。
【获取方式】
1、Nuget获取:Nuget搜索 QX_Frame.Helper_DG

2、GitHub查看源代码:https://github.com/dong666/QX_Frame.Helper_DG
3、联系本人获取,联系方式在下方博客签名中,qq、email均可。
轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)的更多相关文章
- 轻量级ORM框架 QX_Frame.Bantina(一、框架简介)
轻量级ORM框架QX_Frame.Bantina系列讲解(开源) 一.框架简介 http://www.cnblogs.com/qixiaoyizhan/p/7417467.html 二.框架使用方式介 ...
- Struts框架的数据封装二之模型驱动方式
Struts2中提供了两类数据封装的方式? * 第二种方式:模型驱动 > 使用模型驱动的方式,也可以把表单中的数据直接封装到一个JavaBean的对象中,并且表单的写法和之前的写法没有区别! & ...
- 更好的 java 重试框架 sisyphus 配置的 2 种方式介绍
回顾 我们前面学习了 更好的 java 重试框架 sisyphus 入门简介 更好的 java 重试框架 sisyphus 背后的故事 这一节让我们一起学习下 sisyphus 基于函数式的配置和注解 ...
- 更好的 java 重试框架 sisyphus 的 3 种使用方式
回顾 我们前面学习了 更好的 java 重试框架 sisyphus 入门简介 更好的 java 重试框架 sisyphus 配置的 2 种方式介绍 更好的 java 重试框架 sisyphus 背后的 ...
- 轻量级ORM框架初探-Dapper与PetaPoco的基本使用
一.EntityFramework EF是传统的ORM框架,也是一个比较重量级的ORM框架.这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择. 1.1 准备一张数据库 ...
- c# 轻量级ORM框架 实现(一)
发布一个自己写的一个轻量级ORM框架,本框架设计期初基于三层架构.所以从命名上来看,了解三层的朋友会很好理解. 设计该框架的目的:不想重复的写增删改查,把精力放到功能实现上. 发布改框架的原因:希望给 ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之七 || API项目整体搭建 6.2 轻量级ORM
更新 1.在使用的时候,特别是更新数据的时候,如果不知道哪里有问题,可以查看数据库 和 实体类 的字段,是否大小写一致,比如 name 和 Name 2.在使用Sqlsugar 的 CodeFirst ...
- 【从零开始搭建自己的.NET Core Api框架】(三)集成轻量级ORM——SqlSugar:3.1 搭建环境
系列目录 一. 创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...
- .NET轻量级ORM框架Dapper入门精通
一.课程介绍 本次分享课程包含两个部分<.NET轻量级ORM框架Dapper修炼手册>和<.NET轻量级ORM框架Dapper葵花宝典>,阿笨将带领大家一起领略轻量级ORM框架 ...
随机推荐
- 快速学习springMVC框架原理
一.通过导图的方法快速去理解springmvc的原理 二.架构流程. 1. 用户发送请求至前端控制器DispatcherServlet 2. DispatcherServlet收到请求调用Handle ...
- OpenStack(企业私有云)万里长征第五步——虚拟机Migrate&Resize
一.前言 上一篇文章讲了OpenStack的部署和简单操作,今天介绍一下如何实现虚拟机的Migrate以及Resize.Migrate操作和Resize操作基本上属于同一种操作,Migrate操作只是 ...
- Java试题
1.不使用循环,等比数列输出整型 n.2n.4n.8n--当大于max时,反向输出8n.4n.2n.n. 例如 n=10,max=100. 输出: 10 20 40 80 80 40 20 10 解题 ...
- sed的粉丝
UNIX/LINUX下有个工具叫sed,起源于ed命令,但没有人机交互,完全是脚本语言.sed虽然是结构化的程序,但其虚拟出来的机器与我们实际机器相差甚远,依靠模式空间和保留空间的交替使用.正则表达式 ...
- sqlserver的触发器练习实例
触发器的概念:它是由事件驱动的,就像java中的监听,当某个事件发生了,就会做一些工作. 下面直接上干货,创建insert触发器.delete触发器.DDL触发器和如何查看触发器定义 1.创建三个表学 ...
- [补] 如何在windows下用IDA优雅调试ELF
在windows下如何用IDA优雅调试ELF brief: 构建一个IDA-linux_server-docker镜像,优雅地IDA远程调试 使用传统虚拟机来运行一个linux程序就得跑一个完整的li ...
- QBC查询、离线条件查询(DetachedCriteric)和分页查询模版
一.QBC检索步骤 QBC检索步骤: 1.调用Session的createCriteria()方法创建一个Criteria对象. 2.设定查询条件.Expression类提供了一系列用于设定查询条件的 ...
- ES6函数扩展
前面的话 函数是所有编程语言的重要组成部分,在ES6出现前,JS的函数语法一直没有太大的变化,从而遗留了很多问题和的做法,导致实现一些基本的功能经常要编写很多代码.ES6大力度地更新了函数特性,在ES ...
- (转)Collections类方法详解
Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序.搜索以及线程安全等各种操作. 1) 排序(Sort)使用sort方法可以根据元素的自然顺序 对 ...
- hibernate 使用枚举字段的最佳实践
枚举类虽然很简单,但是却往往是系统中业务逻辑最集中最复杂的地方.本文将会分享我们项目中基于hibernate的枚举类使用规范,包含数据库中枚举列数据类型.注释.枚举列与枚举类的映射等. 一.枚举类定义 ...