在应用开发过程中,有 80% 的场景下,开发者所需要的实体查询,查询条件中其实都是一些简单的属性匹配,又或是一些属性匹配的简单组合.Rafy 为这样的场景提供了更为方便使用的 API:CommonQueryCriteria. 属性匹配 在查询时,当需要使用一个或几个属性的限定匹配来进行查询时,我们可以通过 CommonQueryCriteria 来使用以下方法进行快速查询.例如,以下查询实现了通过用户的编码的精确匹配来查询唯一指定的用户: C# public User GetByCode(str…
本文介绍如何使用 Rafy 框架中的 Sql Tree 查询: 除了开发者常用的 Linq 查询,Rafy 框架还提供了 Sql 语法树的方式来进行查询. 这种查询方式下,开发者不需要直接编写真正的 Sql 语句,而是转而使用一套中间 Sql 语法树对象.这隔离了与具体数据库的耦合,使得开发者编写的查询可以跨越多种不同的数据库运行,甚至可以在非关系型数据库中运行.同时,框架还结合托管属性,提供了方便开发者使用的 API,并尽量保持与传统 Sql 相近的语法,使得开发者可以快速理解并编写. 本文包…
  Rafy 框架又添新成员:幽灵插件.本文将解释该插件的场景.使用方法.原理.   场景 在开发各类数据库应用系统时,往往需要在删除数据时不是真正地删除数据,而只是把数据标识为'已删除'状态.这些数据在业务逻辑上是已经完全删除.不可用的数据,但是不能在数据库中真正的把它们删除,而是需要永久保留这些历史数据.即开发人员常说的'假删除'功能. 这种需求往往是系统级的.往往不是针对某一张表,而很可能是针对系统中的所有表都需要实现'假删除'功能.   使用方法 由于这种需求比较常见,所以我们决定专门为…
本文简要说明如何使用 Rafy 框架中的领域控制器. 简介 领域控制器是 Rafy 框架中用于封装领域逻辑的主要方式. 在控制器中,开发者可以封装大量的业务逻辑,并向外暴露业务接口.内部的逻辑在实现时,往往调用一个或多个实体仓库的 CDUQ 方法来实现. 示例 以下代码为 Rafy.Accounts 帐户插件 中 AccountController 类型的真实代码. /// <summary> /// 帐户插件的领域控制器. /// </summary> public class…
为了让开发者更方便地使用 Rafy 领域实体框架,本月,我们已经把最新版本的 Rafy 框架程序集发布到了 nuget.org 上,同时,还把 RafySDK 的最新版本发布到了 VisualStudio 插件仓库中. 以下说明如何下载.更新最新的 SDK 及程序集. 下载.更新最新的 RafySDK 在 VisualStudio 中打开扩展管理器(Tools -> Extensions and Updates),选择在线项目,并搜索 “Rafy” 安装即可.如下图: 同样,只需要在扩展管理器中…
下面是一位同事对当前的产品开发框架提出的一些建议,以及我的回复.我觉得一些问题提得有一定的代表性,在征得本人同意后,将本邮件发布在博客中. 同时,也非常希望对框架.产品有好的建议的小伙伴,都可以给我发邮件:9474649 @ qq.com.    发件人: 胡庆访 发送时间: 2016-07-16 15:36 收件人: 杨盛元 主题: Re: 渣打银行项目,关于rafy框架,一点个人意见. 盛元:     由于最近工作时间的问题,一直没有回复你的技术建议,深感抱歉.     首先,非常感谢你提出…
Rafy 框架又添新成员:流水号插件.本文将解释 Rafy 框架中的流水插件的场景.使用方法. 场景 在开发各类数据库应用系统时,往往需要生成从一开始的流水号,有时还需要按月或者按日进行独立生成,如下面的格式:2016031800000001.2016031800000002……. 设计本插件用于生成上述相应格式的编号. 使用方法 添加插件 1.通过 Nuget Package Manager 搜索并安装 Rafy.SerialNumber 插件. 2.在 DomainApp 中添加该插件:同时…
当我们开始使用EF的同时,是不是就会更好的认识了其他的ORM框架,最近接触了Rafy的使用,感觉还是蛮有兴趣去学习的,虽然最初的我到现在看的并不深入,但是我个人感觉还是可以简单地做一些总结的啦,或许语言不多,但是更多的想总结下它的使用,之前没接触的友友也可以简单地认识一下啦,嘿嘿. 要是想使用Rafy框架,其实很简单的,只需要打开VS然后在工具栏中选择扩展和更新然后搜索Rafy.SDK安装即可. Rafy框架的简单使用 说起来使用,其实还是很简单的入门的,当我们建立完我们的解决方案后我们就新建一…
本文将解释 Rafy 框架中的时间戳插件的场景.使用方法.原理. 场景 在开发各类数据库应用系统时,业务领域实体往往需要包含"创建时间"."最后更新时间"."创建人"."最后更新人"等跟踪戳属性.这些属性是领域实体的基本属性,几乎所有的领域业务操作都会使用到这些属性,如:创建业务数据肯定会保存创建时间.创建人:更新业务数据需要记录最后更新时间:查询业务数据需要显示创建人等. 时间戳插件可以自动在数据层维护这些属性,使开发人员专…
l  什么是Rafy框架? -------- Rafy 是一个面向企业级开发的插件化快速开发框架. l  Rafy的优点是什么? ------快速开发.产品线工程.一套代码可同时生成并运行 C/S.单机版.B/S 三种应用程序. l  Rafy框架怎么用? Rafy User Guide : http://zgynhqf.github.io/Rafy --网页版的Rafy手册 上面这一套是我的学习思路. Rafy笔记 下面我把自己的学习笔记贴一下. 1.         n+1 问题的原因是懒加…
tp框架where条件查询数据库 Where 条件表达式格式为: $map['字段名'] = array('表达式', '操作条件'); 其中 $map 是一个普通的数组变量,可以根据自己需求而命名.上述格式中的表达式实际是运算符的意义: ThinkPHP运算符 与 SQL运算符 对照表 TP运算符 SQL运算符 例子 实际查询条件 eq = $map['id'] = array('eq',100); 等效于:$map['id'] = 100; neq != $map['id'] = array…
安装爬虫 scrapy 框架前提条件 (不然 会 报错) pip install pypiwin32…
Rafy 快一两年没有大的更新了.并不是这个框架没人维护了.相反,主要是因为自己的项目.以及公司在使用的项目,都已经比较稳定了,也没有新的功能添加.但是最近因为外面使用了 Rafy 的几个公司,找到我,提出了一些明确的需求,期望我做一些相应的升级.所以可能最近几个月,会陆续更新 Rafy 框架. 目前,Rafy 已经支持了 NetStandard 2.0.最近升级后,可能截止到明年,会陆续支持 NET5-6 上的一些功能. 今天这篇博客,主要是记录了一个客户提出了多次的需求:实体更新时,只更新改…
在yii框架中,where条件的使用多种多样,下面就和大家介绍几种常用有效的使用方法 1. ['type' => 1, 'status' => 2] //等于 (type = 1) AND (status = 2)   2. ['id' => [1, 2, 3], 'status' => 2] //等于 (id IN (1, 2, 3)) AND (status = 2) 3. ['status' => null] //等于 status IS NULL 4. ['and',…
场景:需要根据系统的编码格式有选择装配类. 分析:最直接的实现方式,定义各种编码格式对应的处理类,可以通过System.getProperty("file.encoding")获得项目的编码格式,从而通过条件语句if...else..等方式做相应的业务处理,然后实际中一个项目往往只用到一种编码格式,如果把所有的编码处理类都装配到spring容器中,那么造成了浪费资源.有没有一种更好的方式可以根据需要只装配对象. 答案肯定是有的,SpringBoot框架为我们提供了@Conditiona…
最近在用ci框架写功能的时候,需要用到分页功能,本来寻常的数据结果分页是比较简单的,但是这次写的功能是多条件搜索查询分页,就有点难度了,看官方手册下面评论好多人问, 正常的分页功能例子是这样的: $this->load->library('pagination'); $config['base_url'] = 'http://example.com/index.php/test/page/'; $config['total_rows'] = 200; $config['per_page'] =…
案例 今天接到一个临时的业务需求,做一个简单的过滤作为临时业务需要使用一两天,于是想到在原有的Cnd条件上加上一个Not like 进行过滤,但是发现现有Cnd条件查询好像满足不了 解决方案 使用Nutz框架中的Static类来实现自定义sql与Cnd.and()拼接,new Static("xxxxx") 里面可以接任意原生sql cnd.and( new Static("job.ADDRESS not like '%广东省%'") );…
本章说明如何使用额外的插件(如客户化插件)对另一插件(如产品插件)进行扩展.   使用场景 在 产品线工程 中,项目的研发分为领域工程和应用工程.这个过程中会需要对领域工程中的内容进行大量的扩展.   分层与扩展点 下图中显示了一个产品插件的逻辑分层,以及各层对应的扩展点.   可扩展的内容 实体属性扩展 可以为产品插件的实体添加新的实体属性,也可以修改现有属性的一些元数据. 实体配置扩展 可以随意修改产品插件中的实体配置,如实体的数据库映射. 实体查询的扩展 可以添加新的实体查询.可以修改.替…
某些场景下,开发者希望能够大批量地把实体的数据导入到数据库中.虽然使用实体仓库保存实体列表非常方便,但是其内部实现机制是一条一条的保存到数据库,当实体的个数较多时,效率就会很低.所以 Rafy 设计了批量导入插件程序,其内部使用 ADO.NET 及 ODP.NET 中的批量导入机制来把大量数据一次性导入到数据库中. 使用方法 步骤 由于批量导入功能是一个额外的程序集,所以在使用该功能时,需要先使用 NuGet 引用最新版本的 Rafy.Domain.ORM.BatchSubmit 程序集. 如果…
有时候,开发者不想通过实体来操作数据库,而是希望通过 SQL 语句或存储过程来直接访问数据库.Rafy 也提供了一组 API 来方便实现这类需求. IDbAccesser 接口 为了尽量屏蔽各数据库中 SQL 语句参数的不同标识,同时也为了使开发者更简单地实现参数化的查询.Rafy 中提供了 IDbAccesser 接口来方便开发者使用.接口定义如下: /// <summary> /// A db accesser which can use formatted sql to communic…
当开发者使用 CodeFirst 开发模式,编写了大量的实体类,在代码中编写了完整的类型注释和属性注释,并自动生成数据库后,往往需要把实体类型和实体属性上的注释同时生成到对应的数据库表及字段上.这样,即方便在查看数据库时能清晰地看到每一个表及字段的含义,也方便使用一些第三方的工具(如 PowerDesigner 等)为数据库生成较为全面的文档. 使用方法 在为数据库生成注释之前,需要保证数据库已经全部生成成功(即和实体保持一致).否则更新字段的注释时,可能因为字段不存在而导致执行失败. 需要在编…
前段时间把 Rafy 的用户手册由 CHM 格式转换为了网页格式,而且发布到了 github.io 上,即方便文档的实时更新,也方便大家查看. Rafy 用户手册网页版地址: http://zgynhqf.github.io/Rafy. --------------------------------------------------------------------------- 附: 如何使用 github.io 来发布网页版帮助文档: https://help.github.com/c…
前言:where里面的条件是 && 的关系,whereOr里面的条件是 | | 的关系, 想要得到的效果: 1.筛选出is_deleted字段为0(未删除)的公告 2.筛选出全部状态为已发送(status=1)的公告 3.状态为草稿的公告仅自己可见 代码(红色框起来的部分): 等价于select * from table(表名) WHERE ( `admin_id` = 当前用户的id )  OR `status` = '1' ) and `is_deleted` = '0 ;    注:…
web层 .js导出事件: //导出为excel文档 $('#btn-export').click(function () { //得到查询的参数 var temp = { //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的 ProcessSteps_RecordId: $("#ProcessSteps_RecordId").val(), OperationModeId: $("#OperationModeId").val(), ScanC…
// WHERE name = 'dogstar' AND age = 18 $user->where(array('name' => 'dogstar', 'age' => 18)) // WHERE name = 'dogstar' OR age = 18 $user->or('name', 'dogstar')->or('age', 18) // WHERE ((name = ? OR id = ?)) AND (note = ?) -- 'dogstar', '1',…
为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了.但是只支持了一些简单的.常用的条件查询,支持的力度很有限.特别是遇到对聚合对象的查询时,就不能再使用 Linq,而只能通过构造底层查询树的接口来完成了.由于开发者的聚合查询的需求越来越多,所以本周我们将这部分进行了增强. 接下来,本文将说明 Rafy 框架原来支持的 Linq 语法,以及最新加入的聚合查询支持及用法.   使用 Linq 查询的代码示例 public WarehouseList G…
距离“上次框架完整发布”已经过去了一年半了,应群中的朋友要求,决定在国庆放假之际,把最新的框架发布出来,并把帮助文档整理出来,这样可以方便大家快速上手.   发布内容 注意,本次发布,只包含 Rafy 框架中的领域实体框架及相关文档.不包含“界面自动生成”等其它组件. 安装新的发布包:<使用 NuGet 下载最新的 Rafy 框架及文档>. 网页版用户手册(实时更新):<http://zgynhqf.github.io/Rafy>. 老版本及一些辅助工具的发布包地址:http://…
本月给公司内部一个项目做架构重构,其中使用到了 Rafy 框架.所以我培训了 Rafy 领域实体框架的使用方法,过程中录制了视频,方便其他同事查看.现在把视频放到园里来分享下,有兴趣的朋友可以看看,有什么问题可以进 Rafy QQ 群询问. 关于 Rafy 开源框架的详细介绍:<Rafy 领域实体框架 2.22.2067 发布!>. 如何下载并使用框架:<使用 NuGet 下载最新的 Rafy 框架及文档>. 本次培训一共有 7 个视频: 1.老系统架构讲解.新系统架构思想简介 2…
Rafy 领域实体框架发布后,虽然有帮助文档,许多朋友还是反映学习起来比较复杂,希望能开发一个示例程序,展示如何使用 Rafy 领域实体框架所以,本文通过使用 Rafy 领域实体框架来改造一个传统的三层架构应用程序——“服装进销存”系统,来讲解如何使用 Rafy 领域实体框架进行数据库应用程序的快速开发,以及替换为使用 Rafy 框架后带来的一些新功能. 完整示例包下载地址:http://pan.baidu.com/s/1AB9TL,其中包含本次改造前.改造后的源代码,以及转换说明文档.(下载该…
去年4月,我们为 Rafy 框架添加了领域模型设计器组件.时隔一年,谨以本文,简要说明该领域模型设计器的设计思想. 设计目标 Rafy 实体框架中以领域驱动设计作为指导思想.所以在开发时,以领域建模为首要任务.为此,我们为它开发了领域模型设计器.开发人员可以在设计器中,设计相应的领域模型,查看现有代码对应的领域模型. 我们为这个设计器制定了以下功能: 外部简单设计器:也就是设计器可以部署为一个可以独立运行的软件.该软件可以打开领域模型的设计图,方便团队中的非开发人员角色查看.同样,这个软件最好也…