1.       SQL 语句生成组建

之前说过ORM框架中有一个非常重要的组件,那就是SQL语句生成组件。SQL语句生成组件,顾名思义就是用于生成sql语句的一个组件。之前的Attribute 是用于修饰实体信息,而上一章讲的实体分析器分析了实体信息,在很大一部分程度上,以上做工作就是为这个SQL语句生成组件服务的。

该组件的核心接口是IDbFactory,它实现了接口IDisposable

目前该ORM支持SQL Server 数据库的sql语句生成,在后期过程中会逐步实现对Oracle,Mysql,Access 等数据库的支持

下面是该接口定义的方法图表:ORM映射框架总结--SQL 语句生成组件

2.       核心接口

核心接口定义源码

  1 /**
  2  * 2010-2-2
  3  * 
  4  * 情 缘
  5  * 
  6  * IDbFactory 接口实现了IDisposable 接口,实现该
  7  * 接口的类可以通过IDisposable 接口来释放对象占用
  8  * 的内存。该接口的主要作用适用于根据实体对象来创
  9  * 建SQL Server 数据库脚本。ORM 的主要作用是为了
 10  * 实现对象化操作数据库,而此操作就是为了实现对象
 11  * 化操作和数据库语句操作的过渡
 12  * 
 13  * */
 14 using System;
 15 using System.Collections.Generic;
 16 using System.Linq;
 17 using System.Text;
 18 using CommonData.Entity;
 19 using System.Data;
 20 using CommonData.Model.Core;
 21 
 22 namespace CommonData.Data.Core
 23 {
 24     public interface IDbFactory : IDisposable
 25     {
 26         /// <summary>
 27         /// 根据实体对象公共接口创建插入的sql语句
 28         /// </summary>
 29         /// <param name="entity">实体公共接口</param>
 30         /// <param name="param">创建sql语句对应占位符参数</param>
 31         /// <returns></returns>
 32         string CreateInsertSql(IEntity entity, out IDataParameter[] param);
 33 
 34         /// <summary>
 35         /// 根据实体类型创建插入sql语句
 36         /// </summary>
 37         /// <param name="type">实体类型</param>
 38         /// <param name="value">实体对象</param>
 39         /// <param name="param">创建sql语句对应占位符参数</param>
 40         /// <returns></returns>
 41         string CreateInsertSql(Type type, object value, out IDataParameter[] param);
 42 
 43         /// <summary>
 44         /// 根据泛型类型创建插入sql语句
 45         /// </summary>
 46         /// <typeparam name="T">泛型类型</typeparam>
 47         /// <param name="t">泛型实体类</param>
 48         /// <param name="param">创建sql语句对应占位符参数</param>
 49         /// <returns></returns>
 50         string CreateInsertSql<T>(T t, out IDataParameter[] param) where T : IEntity;
 51 
 52         /// <summary>
 53         /// 根据实体对象公共接口创建修改的的sql语句
 54         /// 该sql语句是根据主键列修改的
 55         /// </summary>
 56         /// <param name="entity">实体公共接口</param>
 57         /// <param name="param">创建sql语句对应占位符参数</param>
 58         /// <returns></returns>
 59         string CreateUpdateSql(IEntity entity, out IDataParameter[] param);
 60 
 61         /// <summary>
 62         /// 根据实体对象类型创建修改的的sql语句
 63         /// </summary>
 64         /// <param name="type">实体类型</param>
 65         /// <param name="value">实体对象</param>
 66         /// <param name="param">创建sql语句对应占位符参数</param>
 67         /// <returns></returns>
 68         string CreateUpdateSql(Type type, object value, out IDataParameter[] param);
 69 
 70         /// <summary>
 71         /// 根据实体对象公共接口创建修改的的sql语句
 72         /// 该sql语句是根据一个特定的属性作为修改条件的
 73         /// </summary>
 74         /// <param name="entity">实体公共接口</param>
 75         /// <param name="param">创建sql语句对应占位符参数</param>
 76         /// <param name="propertyName">属性名称</param>
 77         /// <returns></returns>
 78         string CreateUpdateSql(IEntity entity, out IDataParameter[] param, string propertyName);
 79 
 80         /// <summary>
 81         /// 根据实体对象类型创建修改的的sql语句
 82         /// 该sql语句是根据一个特定的属性作为修改条件的
 83         /// </summary>
 84         /// <param name="type">实体类型</param>
 85         /// <param name="value">实体对象</param>
 86         /// <param name="param">创建sql语句对应占位符参数</param>
 87         /// <param name="propertyName">属性名称</param>
 88         /// <returns></returns>
 89         string CreateUpdateSql(Type type, object value, out IDataParameter[] param, string propertyName);
 90 
 91         /// <summary>
 92         /// 根据实体对象公共接口创建修改的的sql语句
 93         /// 该sql语句是根据多个特定的属性作为修改条件的
 94         /// </summary>
 95         /// <param name="entity">实体公共接口</param>
 96         /// <param name="param">创建sql语句对应占位符参数</param>
 97         /// <param name="propertyNames">属性名称</param>
 98         /// <returns></returns>
 99         string CreateUpdateSql(IEntity entity, out IDataParameter[] param, string[] propertyNames);
100 
101         /// <summary>
102         /// 根据实体对象类型创建修改的的sql语句
103         /// 该sql语句是根据多个特定的属性作为修改条件的
104         /// </summary>
105         /// <param name="type">实体类型</param>
106         /// <param name="value">实体对象</param>
107         /// <param name="param">创建sql语句对应占位符参数</param>
108         /// <param name="propertyNames">属性名称</param>
109         /// <returns></returns>
110         string CreateUpdateSql(Type type, object value, out IDataParameter[] param, string[] propertyNames);
111 
112         /// <summary>
113         /// 根据实体对象公共接口创建修改的的sql语句
114         /// 该sql语句是根据查询组建创建的
115         /// </summary>
116         /// <param name="entity">实体公共接口</param>
117         /// <param name="param">创建sql语句对应占位符参数</param>
118         /// <param name="component">查询条件组件</param>
119         /// <returns></returns>
120         string CreateUpdateSql(IEntity entity, out IDataParameter[] param, ConditionComponent component);
121 
122         /// <summary>
123         /// 根据实体对象公共接口创建删除sql语句
124         /// 该sql语句是根据实体主键删除
125         /// </summary>
126         /// <param name="entity">实体公共接口</param>
127         /// <param name="param">创建sql语句对应占位符参数</param>
128         /// <returns></returns>
129         string CreateDeleteSql(IEntity entity, out IDataParameter[] param);
130 
131         /// <summary>
132         /// 根据实体对象类型创建删除sql语句
133         /// 该sql语句是根据实体主键删除
134         /// </summary>
135         /// <param name="type">实体类型</param>
136         /// <param name="value">实体对象</param>
137         /// <param name="param">创建sql语句对应占位符参数</param>
138         /// <returns></returns>
139         string CreateDeleteSql(Type type,object value,out IDataParameter[] param);
140 
141         /// <summary>
142         /// 根据实体对象公共接口的某个属性创建删除sql语句
143         /// 该sql语句是根据实体属性删除
144         /// </summary>
145         /// <param name="entity">实体公共接口</param>
146         /// <param name="param">创建sql语句对应占位符参数</param>
147         /// <param name="propertyName">实体属性名称</param>
148         /// <returns></returns>
149         string CreateDeleteSql(IEntity entity, out IDataParameter[] param, string propertyName);
150 
151         /// <summary>
152         /// 根据实体对象类型的某个属性创建删除sql语句
153         /// 该sql语句是根据实体属性删除
154         /// </summary>
155         /// <param name="type">实体类型</param>
156         /// <param name="value">实体对象</param>
157         /// <param name="param">创建sql语句对应占位符参数</param>
158         /// <param name="propertyName">实体属性名称</param>
159         /// <returns></returns>
160         string CreateDeleteSql(Type type, object value, out IDataParameter[] param, string propertyName);
161 
162         /// <summary>
163         /// 根据实体对象公共接口的多个属性创建删除sql语句
164         /// 该sql语句是根据实体多个属性删除
165         /// </summary>
166         /// <param name="entity">实体公共接口</param>
167         /// <param name="param">创建sql语句对应占位符参数</param>
168         /// <param name="propertyName">实体属性名称数组</param>
169         /// <returns></returns>
170         string CreateDeleteSql(IEntity entity, out IDataParameter[] param, string[] propertyNames);
171 
172         /// <summary>
173         /// 根据实体对象类型的多个属性创建删除sql语句
174         /// 该sql语句是根据实体多个属性删除
175         /// </summary>
176         /// <param name="type">实体了姓</param>
177         /// <param name="value">实体对象</param>
178         /// <param name="param">创建sql语句对应占位符参数</param>
179         /// <param name="propertyNames">实体属性名称数组</param>
180         /// <returns></returns>
181         string CreateDeleteSql(Type type, object value, out IDataParameter[] param, string[] propertyNames);
182 
183         /// <summary>
184         /// 根据实体对象公共接口的多个属性创建删除sql语句
185         /// 该sql语句使根据查询组建来创建的
186         /// </summary>
187         /// <param name="entity">实体公共接口</param>
188         /// <param name="param">创建sql语句对应占位符参数</param>
189         /// <param name="component">实体属性名称数组</param>
190         /// <returns></returns>
191         string CreateDeleteSql(IEntity entity, out IDataParameter[] param, ConditionComponent component);
192 
193         /// <summary>
194         /// 根据实体的公共接口创建查询单行数据的sql语句
195         /// 该sql语句是根据数据库表的主键来查询的
196         /// </summary>
197         /// <param name="entity">实体公共接口</param>
198         /// <param name="param">创建sql语句对应占位符参数</param>
199         /// <returns></returns>
200         string CreateSingleSql(IEntity entity, out IDataParameter[] param);
201 
202         /// <summary>
203         /// 根据实体的公共接口创建查询单行数据的sql语句
204         /// 该sql语句是根据实体的相应属性来查询
205         /// </summary>
206         /// <param name="entity">实体公共接口</param>
207         /// <param name="param">创建sql语句对应占位符参数</param>
208         /// <returns></returns>
209         string CreateSingleSql(IEntity entity, out IDataParameter[] param, string[] propertyNames);
210 
211         /// <summary>
212         /// 根据实体类型创建查询单行数据的sql语句
213         /// 该sql语句是根据实体的相应属性来查询
214         /// </summary>
215         /// <param name="type">实体类型</param>
216         /// <param name="value">实体对象</param>
217         /// <param name="param">创建sql语句对应占位符参数</param>
218         /// <param name="propertyNames">属性名称数组</param>
219         /// <returns></returns>
220         string CreateSingleSql(Type type, object value, out IDataParameter[] param, string[] propertyNames);
221 
222         /// <summary>
223         /// 根据实体的类型创建查询sql语句
224         /// </summary>
225         /// <param name="entityType">实体类型</param>
226         /// <returns></returns>
227         string CreateSingleSql(Type entityType);
228 
229         /// <summary>
230         /// 根据实体的类型创建查询sql语句,
231         /// 该方法指定主键值
232         /// </summary>
233         /// <param name="type">实体类型</param>
234         /// <param name="pkPropertyValue">主键值</param>
235         /// <param name="param">创建sql语句对应占位符参数</param>
236         /// <returns></returns>
237         string CreateSingleSql(Type type, object pkPropertyValue,out IDataParameter[] param);
238 
239         /// <summary>
240         /// 根据实体的类型创建查询该实体对象对应数据库表的所有数据的sql语句
241         /// 该sql语句用于查询所有数据,并转换为相应List<T> 集合
242         /// </summary>
243         /// <param name="type">实体的类型</param>
244         /// <returns></returns>
245         string CreateQuerySql(Type type);
246 
247         /// <summary>
248         /// 根据实体的某个属性创建根据该属性字段查询数据的sql语句
249         /// 该sql语句是使用参数中属性对应字段作为条件查询的
250         /// </summary>
251         /// <param name="type">实体类型</param>
252         /// <param name="propertyName">属性名称</param>
253         /// <param name="value">属性值</param>
254         /// <param name="param">sql语句占位符参数</param>
255         /// <returns></returns>
256         string CreateQueryByPropertySql(Type type, string propertyName, object value, out IDataParameter[] param);
257 
258         /// <summary>
259         /// 根据实体的某些属性创建根据该些属性字段查询数据的sql语句
260         /// 该sql语句是使用参数中属性对应字段作为条件查询的,并且该
261         /// 属性集合都是根据and条件组装的
262         /// </summary>
263         /// <param name="type">实体类型</param>
264         /// <param name="dic">属性-值集合</param>
265         /// <param name="param">sql语句占位符参数</param>
266         /// <returns></returns>
267         string CreateQueryByPropertySql(Type type, IDictionary<stringobject> dic, out IDataParameter[] param);
268 
269         /// <summary>
270         /// 根据实体的某些属性创建根据该些属性字段查询数据的sql语句
271         /// 该sql语句是使用参数中属性对应字段作为条件查询的,并且查
272         /// 询是根据查询组建来创建
273         /// </summary>
274         /// <param name="type">实体类型</param>
275         /// <param name="dic">属性-值集合</param>
276         /// <param name="param">sql语句占位符参数</param>
277         /// <param name="component">查询组建</param>
278         /// <returns></returns>
279         string CreateQueryByPropertySql(Type type, IDictionary<stringobject> dic, out IDataParameter[] param, ConditionComponent component);
280 
281         /// <summary>
282         /// 根据实体类型来创建该实体对应数据库表的聚合函数查询sql语句
283         /// 该方法创建的sql语句主要是用于查询数据行数
284         /// </summary>
285         /// <param name="type">实体类型</param>
286         /// <param name="converage">聚合函数枚举类型</param>
287         /// <returns></returns>
288         string CreateConverageSql(Type type, Converage converage);
289 
290         /// <summary>
291         /// 根据实体类型来创建该实体对应数据库表的聚合函数查询sql语句
292         /// 该方法创建的sql语句主要是用于统计查询(最大值,最小值,求和,平均值,数据行数)
293         /// </summary>
294         /// <param name="type">实体类型</param>
295         /// <param name="converage">聚合函数枚举类型</param>
296         /// <param name="propertyName">聚合函数作用的属性名称</param>
297         /// <returns></returns>
298         string CreateConverageSql(Type type, Converage converage, string propertyName);
299 
300         /// <summary>
301         /// 根据实体类型来创建该实体对应数据库表的聚合函数查询sql语句
302         /// 该方法创建的sql语句主要是用于统计查询(最大值,最小值,求和,平均值,数据行数),
303         /// 同时该sql是有条件查询的
304         /// </summary>
305         /// <param name="type">实体类型</param>
306         /// <param name="converage">聚合函数枚举类型</param>
307         /// <param name="propertyName">聚合函数作用的属性名称</param>
308         /// <param name="dic">查询条件属性键值</param>
309         /// <param name="component">查询条件组建对象</param>
310         /// <returns></returns>
311         string CreateConverageSql(Type type, Converage converage, string propertyName, IDictionary<stringobject> dic, out IDataParameter[] param, ConditionComponent component);
312 
313         /// <summary>
314         /// 根据占位符名称创建参数
315         /// </summary>
316         /// <param name="name">占位符名称</param>
317         /// <returns></returns>
318         IDataParameter CreateParameter(string name);
319 
320         /// <summary>
321         /// 根据占位符和值创建参数
322         /// </summary>
323         /// <param name="name">占位符名称</param>
324         /// <param name="value">占位符的值</param>
325         /// <returns></returns>
326         IDataParameter CreateParameter(string name, object value);
327 
328         /// <summary>
329         /// 根据占位符名称,类型和值创建参数
330         /// </summary>
331         /// <param name="name">占位符名称</param>
332         /// <param name="type">参数的类型</param>
333         /// <param name="value">参数的值</param>
334         /// <returns></returns>
335         IDataParameter CreateParameter(string name, DataType type, object value);
336 
337         /// <summary>
338         /// 根据占位符的名称,类型和大小创建参数
339         /// </summary>
340         /// <param name="name">占位符名称</param>
341         /// <param name="type">参数类型</param>
342         /// <param name="size">参数值大小</param>
343         /// <returns></returns>
344         IDataParameter CreateParameter(string name, DataType type, int size);
345 
346         /// <summary>
347         /// 根据占位符的名称,类型,大小和值创建参数
348         /// </summary>
349         /// <param name="name">占位符名称</param>
350         /// <param name="type">参数类型</param>
351         /// <param name="size">参数大小</param>
352         /// <param name="value">参数值</param>
353         /// <returns></returns>
354         IDataParameter CreateParameter(string name, DataType type, int size, object value);
355 
356         /// <summary>
357         /// 根据占位符名称和类型创建参数
358         /// </summary>
359         /// <param name="name">占位符名称</param>
360         /// <param name="type">占位符类型</param>
361         /// <returns></returns>
362         IDataParameter CreateParameter(string name, DataType type);
363     }
364 }
365 

相关文章: