轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

时间:2021-04-10 09:41:57

轻量级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 使用方式做详细介绍。

  介绍之前,我们先在本地创建一个数据库,作为演示使用实例以及数据库查询对比的操作对象,该数据库结构如下图所示:

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  数据库名: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框架)

  轻量级ORM框架 QX_Frame.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 !");
     }
 }

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  启动调试执行该方法

  原数据库记录:

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  执行后数据库记录:

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  很简单的操作,我们将该条目插入了数据库。

  我们可以在数据库上下文的对象的属性中看到执行的sql语句

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  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}");
 }

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  查询一条Name包含55的数据,如果有多条,会自动匹配第一条。

  执行上述代码:

  数据库原纪录:

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  执行结果:

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  通过主外键关联的记录也可以被查询到。

  我们可以在数据库上下文的对象的属性中看到执行的sql语句:

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  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}");
     }
 }

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  我们执行上述的查询方法:

  数据库原纪录:

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  执行后的结果:

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  通过主外键关联的记录也可以被查询到。

  我们可以在数据库上下文的对象的属性中看到执行的sql语句:

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  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}");
     }
 }

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  我们执行上述的查询方法:

  数据库原纪录:

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  查询后的结果如下:

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  当前方法传递的参数说明:

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语句:

轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  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 !");
     }
 }

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  我们将Name包含55的第一条记录的年龄改成55.

  我们执行上述的查询方法:

  数据库原纪录:

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  执行结果:

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

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

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  可以看到,数据已经被成功修改。

  通过数据库上下文对象我们来查看执行的sql语句:

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

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

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  当然,如果是自增字段,那么会自动跳过修改环节。

  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 !");
     }
 }

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  我们将Name包含55的第一条记录进行删除操作.

  我们执行上述的查询方法:

  数据库原纪录:

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  执行结果:

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

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

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  可以看到,数据已经被成功删除。

  通过数据库上下文对象我们来查看执行的sql语句:

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

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

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  7、原生Sql查询方式支持

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

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

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

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  查询结果:

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  在这里需要说明的是,这里不会直接对关联外键表进行查询,我们这里查询传入的泛型T和表查询的结果必须是一一对应的,因此,我们可以实现配置DTO数据传输对象去匹配查询的结果集。

  并不是不能实现关联查询,是为了保持sql查询的灵活性的特点没有加相应功能。


  到这里,我们大部分的基础功能操作已经演示完毕,已经可以满足我们大部分的业务需求。

  关于我们Bantina ORM 实体框架的性能介绍我们会放在下一章进行和其他常用ORM框架作为对比展示。

【获取方式】

  1、Nuget获取:Nuget搜索 QX_Frame.Helper_DG

  轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

  2、GitHub查看源代码:https://github.com/dong666/QX_Frame.Helper_DG

  3、联系本人获取,联系方式在下方博客签名中,qq、email均可。

轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)的更多相关文章

  1. 轻量级ORM框架 QX&lowbar;Frame&period;Bantina(一、框架简介)

    轻量级ORM框架QX_Frame.Bantina系列讲解(开源) 一.框架简介 http://www.cnblogs.com/qixiaoyizhan/p/7417467.html 二.框架使用方式介 ...

  2. Struts框架的数据封装二之模型驱动方式

    Struts2中提供了两类数据封装的方式? * 第二种方式:模型驱动 > 使用模型驱动的方式,也可以把表单中的数据直接封装到一个JavaBean的对象中,并且表单的写法和之前的写法没有区别! & ...

  3. 更好的 java 重试框架 sisyphus 配置的 2 种方式介绍

    回顾 我们前面学习了 更好的 java 重试框架 sisyphus 入门简介 更好的 java 重试框架 sisyphus 背后的故事 这一节让我们一起学习下 sisyphus 基于函数式的配置和注解 ...

  4. 更好的 java 重试框架 sisyphus 的 3 种使用方式

    回顾 我们前面学习了 更好的 java 重试框架 sisyphus 入门简介 更好的 java 重试框架 sisyphus 配置的 2 种方式介绍 更好的 java 重试框架 sisyphus 背后的 ...

  5. 轻量级ORM框架初探-Dapper与PetaPoco的基本使用

    一.EntityFramework EF是传统的ORM框架,也是一个比较重量级的ORM框架.这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择. 1.1 准备一张数据库 ...

  6. c&num; 轻量级ORM框架 实现&lpar;一&rpar;

    发布一个自己写的一个轻量级ORM框架,本框架设计期初基于三层架构.所以从命名上来看,了解三层的朋友会很好理解. 设计该框架的目的:不想重复的写增删改查,把精力放到功能实现上. 发布改框架的原因:希望给 ...

  7. 从壹开始前后端分离【 &period;NET Core2&period;0 &plus;Vue2&period;0 】框架之七 &vert;&vert; API项目整体搭建 6&period;2 轻量级ORM

    更新 1.在使用的时候,特别是更新数据的时候,如果不知道哪里有问题,可以查看数据库 和 实体类 的字段,是否大小写一致,比如 name 和 Name 2.在使用Sqlsugar 的 CodeFirst ...

  8. 【从零开始搭建自己的&period;NET Core Api框架】(三)集成轻量级ORM——SqlSugar:3&period;1 搭建环境

    系列目录 一.  创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...

  9. &period;NET轻量级ORM框架Dapper入门精通

    一.课程介绍 本次分享课程包含两个部分<.NET轻量级ORM框架Dapper修炼手册>和<.NET轻量级ORM框架Dapper葵花宝典>,阿笨将带领大家一起领略轻量级ORM框架 ...

随机推荐

  1. Datazen自定义地图

    Datazen的地图数据定义主要以ESRI的Shape文件格式为主,这是现如今被广泛使用的一种地图数据格式.在Datazen中,自定义地图需要提供如下两个地图数据定义文件: SHP文件提供地图的位置数 ...

  2. svn清除已保存的用户名和密码

    在项目中使用SVN是必须的,我们一般将用户名和密码进行保存处理,这样做的好处在于每次都不用输入了,方便快捷.但是当我们想用另外一个svn账号时,这时候该怎么办呢,看下图,让提示框重新出来. 找到这个页 ...

  3. javascript变量、作用域和内存问题&period;&period;&period;&period;&period;&period;

    1基本类型是指那些保存在栈内存的简单数据段,引用类型是指那些保存在堆内存中的对象,变量中保存的实际上只是一个指针. 2javascript中5种基本数据类型Undefined,Null,Boolean ...

  4. HDFS 整体把握

    对于HDFS这样一个分布式文件系统,它的目的是为了实现在多台廉价X86服务器上实现大文件存储.     HDFS 是仿造GFS 设计出来的. 如图所示, 这种实现方案是一种采取有一个中心节点, 多个数 ...

  5. ASP&period;NET MVC制作404跳转(非302和200)

    前言:距离上次发文已经有几个月了! 这段时间李,制作了一个博客网站,现将博客文章选一些发表到博客园,顺便为自己网站打一下广告! 产生404的原因主要有以下: 1.浏览器和爬虫:某些浏览器会请求网站的f ...

  6. bzoj 3566&colon; &lbrack;SHOI2014&rsqb;概率充电器

    Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器:"采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率 ...

  7. JS 监听浏览器各个标签间的切换

    以前看到过一些网页,在标签切换到其它地址时,网页上的标题上会发生变化,一直不知道这个是怎么做的,最近查了一些资料才发现有一个 visibilitychange 事件就可以搞定,这里将介绍一下页面可见性 ...

  8. 学习React系列(五)——使性能最优

    提高性能可分为两方面: 一.配置层面 二.代码层面 本文只从代码层面考虑: 一.避免重复渲染 这里要说一句: 当shouldComponentUpdate返回false的时候不触发render函数也就 ...

  9. django2&period;0无法加载外部css和js的问题

    解决问题的思路来源于https://www.v2ex.com/t/430192 先是创建static目录,该目录与manage.py同级 然后在项目settings.py文件里添加 STATICFIL ...

  10. &lbrack;TPYBoard - Micropython之会python就能做硬件 8&rsqb; 学习使用超声波模块制作避障小车

    转载请注明:@小五义 http://www.cnblogs.com/xiao* 欢迎加入讨论群 64770604   一.实验器材 1.TPYboard V102板  一块 2.电机驱动模块L2 ...

相关文章