CRL数据映射工作原理

CRL并不直接对数据库进行操作,它只会处理生成对应的SQL语句和参数,由委托注入的数据访问对象来执行,目前采用CoreHelper.SqlHelper

因此,需要在Gblobal中实现数据访问委托,在委托方法中,可根据type区分是由哪一个业务创建的委托,从而达到多数据库的实现

通过封装的数据结构检查方法,可以编程方式对数据库里表结构进行同步

整体过程如下

同理,如果需要增加多数据库类型支持,只需增加对应的数据库访问和查询语法转换即可(需改进增加接口,未来版本实现)

查询转换时,简单的逻辑运算可直接转为SQL,大于,小于,等于,或,但一些比较特殊的语法则需要借助扩展方法进行处理

扩展方法如下:

  1  /// <summary>
  2     /// 查询扩展方法,请引用CRL命名空间
  3     /// </summary>
  4     public static partial class ExtensionMethod
  5     {
  6         /// <summary>
  7         /// lamada传入方法,传入要查询的字段
  8         /// 示例:b.SelectField(b.Id, b.Name)
  9         /// </summary>
 10         /// <param name="args"></param>
 11         /// <returns></returns>
 12         public static bool SelectField(this IModelBase s, params object[] args)
 13         {
 14             return true;
 15         }
 16         /// <summary>
 17         /// Like("%key%")
 18         /// </summary>
 19         /// <param name="s"></param>
 20         /// <param name="likeString"></param>
 21         /// <returns></returns>
 22         public static bool Like(this string s,string likeString)
 23         {
 24             if (string.IsNullOrEmpty(likeString))
 25                 throw new Exception("参数值不能为空:likeString");
 26             return s.IndexOf(likeString) > -1;
 27         }
 28         /// <summary>
 29         /// NotLike("%key%")
 30         /// </summary>
 31         /// <param name="s"></param>
 32         /// <param name="likeString"></param>
 33         /// <returns></returns>
 34         public static bool NotLike(this string s, string likeString)
 35         {
 36             if (string.IsNullOrEmpty(likeString))
 37                 throw new Exception("参数值不能为空:likeString");
 38             return s.IndexOf(likeString) == -1;
 39         }
 40         /// <summary>
 41         /// 字符串 In("‘1312‘,‘123123‘")
 42         /// </summary>
 43         /// <param name="s"></param>
 44         /// <param name="inString"></param>
 45         /// <returns></returns>
 46         public static bool In(this string s, string inString)
 47         {
 48             if (string.IsNullOrEmpty(inString))
 49                 throw new Exception("参数值不能为空:inString");
 50             return s.IndexOf(inString) > -1;
 51         }
 52         /// <summary>
 53         /// 字符串 NotIn("‘1312‘,‘123123‘")
 54         /// </summary>
 55         /// <param name="s"></param>
 56         /// <param name="inString"></param>
 57         /// <returns></returns>
 58         public static bool NotIn(this string s, string inString)
 59         {
 60             if (string.IsNullOrEmpty(inString))
 61                 throw new Exception("参数值不能为空:inString");
 62             return s.IndexOf(inString) == -1;
 63         }
 64         /// <summary>
 65         /// 数字 In(12312,12312)
 66         /// </summary>
 67         /// <param name="s"></param>
 68         /// <param name="values"></param>
 69         /// <returns></returns>
 70         public static bool In(this int s, params int[] values)
 71         {
 72             if (values==null)
 73                 throw new Exception("参数值不能为空:inString");
 74             return true;
 75         }
 76         /// <summary>
 77         /// 数字 NotIn(1231,1231)
 78         /// </summary>
 79         /// <param name="s"></param>
 80         /// <param name="values"></param>
 81         /// <returns></returns>
 82         public static bool NotIn(this int s, params int[] values)
 83         {
 84             if (values == null)
 85                 throw new Exception("参数值不能为空:inString");
 86             return true;
 87         }
 88         /// <summary>
 89         /// 枚举转换为INT
 90         /// </summary>
 91         /// <param name="e"></param>
 92         /// <returns></returns>
 93         public static int ToInt(this Enum e)
 94         {
 95             return Convert.ToInt32(e);
 96         }
 97         public static bool Between(this DateTime time, DateTime begin, DateTime end)
 98         {
 99             return true;
100         }
101         /// <summary>
102         ///
103         /// </summary>
104         /// <param name="time"></param>
105         /// <param name="format">比较方式,M,D,H</param>
106         /// <param name="compareTime">比较时间</param>
107         /// <param name="compare">如何比较, =0 >0</param>
108         /// <returns></returns>
109         public static bool DateDiff(this DateTime time, string format, DateTime compareTime, string compare)
110         {
111             return true;
112         }
113         public static bool ContainsString(this string str, string value)
114         {
115             return true;
116         }
117     }

调用示例 DateDiff

b => b.AddTime.DateDiff("d", date, "=0")

Like

b => b.Name.Like("%小明%")

由于Lamada解析问题,语法目前只能属性在左,变量在右,不然会引发解析出错,系统自带逻辑方法不会进行转换,使用后出会引发解析错误

CRL数据映射工作原理,布布扣,bubuko.com

时间: 2024-10-12 21:53:44

CRL数据映射工作原理的相关文章

Sftp和ftp 区别、工作原理等(服务器被动就是被动模式,PORT模式建立数据传输通道是由服务器端发起的,在PASV模式中,数据传输的通道的建立是由FTP客户端发起的)good

Sftp和ftp over ssh2的区别 最近使用SecureFx,涉及了两个不同的安全文件传输协议: -sftp -ftp over SSH2 这两种协议是不同的.sftp是ssh内含的协议,只要sshd服务器启动了,它就可用,它本身不需要ftp服务器启动.ftp over SSH2则象一个二传手. 1.SFTP的工作模式: 图1显示了SFTP的工作模式,它是作为SSH2的一个子服务工作的. 图 1 SFTP工作模式 2.FTP over SSH2 此协议还是基于ftp协议的.在此协议中SS

大数据 --&gt; 分布式文件系统HDFS的工作原理

分布式文件系统HDFS的工作原理 Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数据访问,非常适合大规模数据集上的应用.要理解HDFS的内部工作原理,首先要理解什么是分布式文件系统. 1.分布式文件系统 多台计算机联网协同工作(有时也称为一个集群)就像单台系统一样解决某种问题,这样的系统我们称之为分布式系统. 分布式文件系统是分布式系统的一个子集,它们解决的问题就是数据存储.换句

[Java] SSH框架笔记_SSH三大框架的工作原理及流程

Hibernate工作原理及为什么要用? 原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>读取并解析映射信息3.通过config.buildSessionFactory();//创建SessionFactory4.sessionFactory.openSession();//打

JAVA Hibernate工作原理及为什么要用

hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口session:负责被持久化对象CRUD操作sessionFactory:负责初始化hibernate,创建session对象configuration:负责配置并启动hibernate,创建SessionFactoryTransaction:负责事物相关的操作Query和Criteria接口:负责

HashMap的工作原理

这是一节让你深入理解hash_map的介绍,如果你只是想囫囵吞枣,不想理解其原理,你倒是可以略过这一节,但我还是建议你看看,多了解一些没有坏处. hash_map基于hash table(哈希表).哈希表最大的优点,就是把数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间:而代价仅仅是消耗比较多的内存.然而在当前可利用内存越来越多的情况下,用空间换时间的做法是值得的.另外,编码比较容易也是它的特点之一. 其基本原理是:使用一个下标范围比较大的数组来存储元素.可以设计一个函数(哈希函数,也

LVS介绍及工作原理图解

很多人使用过LVS集群系统,但对于LVS集群,大多数人不清楚它到底是个什么东西.接下来我们就聊聊LVS及其工作原理. 一.lvs介绍 LVS的英文全名为"Linux Virtual Server",即Linux虚拟服务器,是一个虚拟的四层交换器集群系统,根据目标地址和目标端口实现用户请求转发,本身不产生流量,只做用户请求转发,目前是负载均衡性能最好的集群系统. 二.Lvs原理介绍 图示如下: 1.首先用户向负载均衡器调度器(Director Server)发起请求,负载均衡器将请求发往

inode工作原理

inode的工作原理: 如果把blcok比作书中的内容,那么inode就是inode就是这个书的目录,inode中记录文件的是文件的元数据信息,如:权限.大小.属主属组.时间戳.以及数据块所在的位置等信息,blcok中存储的才是真正的数据 block:每个blcok默认大小是4k(创建文件系统的时候可以修改),且每个blcok只能给一个文件使用,例如,有一个1k的文件,把该文件放到block中,那么块中剩余的3k也不能用, blcok的大小需要根据实际应用情况来定,例如,现在把块大小设置为1k,

[基础架构]PeopleSoft工作原理(从浏览器发送请求开始)

PeopleSoft体系结构是由几大组成部分构成,之前文章已经详细讲过,了解这几大组成部分是怎么协同工作的更为重要.在本文中将帮助您了解PeopleSoft的工作原理以及用户发送的请求是如何被解析以及如何返回给用户的.该文内容不仅可以帮助技术团队解决项目中遇到的技术问题,也可以更好帮助大家了解PeopleSoft的体系结构. PeopleSoft如何工作(以下编号对应上图中编号) 由web浏览器解析url地址链接,该url映射webserver 的ip. 在servlet引擎中运行servlet

JSP基本语法总结【1】(jsp工作原理,脚本元素,指令元素,动作元素)

时隔半年,回头对jsp复习整理一下,温故而知新. jsp工作原理: jsp服务器管理jsp页面分两个阶段:转换阶段(translation phase)和执行阶段(execution phase). 客户发送请求时,服务器检验jso语法是否正确,然后转换成servlet源文件,然后调用javac工具类便宜servlet源文件生成class文件,此阶段为转换阶段. 接下来,servlet容器加载转换后的servlet类,实例化一个对象来处理客户端的请求.请求处理后,响应对象被jsp服务器接收,服务