一个简单Net 类似ORM工具
来源:互联网 发布:软件行业研究报告 编辑:程序博客网 时间:2024/06/07 22:45
近期做项目,由于总要写烦人的Sql,就写了一个简单的ORM小工具,在数据缓存和事务处理还没怎么扩展,由于时间关系后续会补上嘀,废话少说了,看代码:
没有用Hibernate通过xml去动态生成数据库表字段,核心是通过反射取得实体对应数据库表的字段,这个字段可以加属性标识加以区分是否是数据库表字段。
1、实体基类,任何实体子类都要继承这个实体基类:
using System;using System.Collections.Generic;namespace SFDC.Model{ /// <summary> /// 实体基类 /// </summary> [Serializable] public class BaseEntity { /// <summary> /// 数据库操作方式:1-查询,2-新建,3-更新,4-删除。 /// </summary> public int OperaMode{get;set;} /// <summary> /// 只返回需要的表字段,格式:field1,field2,... /// </summary> public string TableFields { get; set; } /// <summary> /// 实体中有关联的表子集合,[table,relatedID] /// </summary> public Dictionary<string, string> DicRelatedTable { get; set; } } /// <summary> /// 数据库操作方式:1-查询,2-新建,3-更新,4-删除。 /// </summary> public enum OperaEnum { Select=1, Insert=2, Update=3, Delete=4, }}
2、逻辑类图:
using System.Collections.Generic;using System.Reflection;using SFDC.Model;using System.Linq;using System;using System.Data.SqlClient;using SFDC.BLL.Helper;using System.Data;using SFDC.Common.Helper;namespace SFDC.BLL.DALCommon{ /// <summary> /// 数据库DAL查询处理 /// </summary> public class SelectProcessDAL : IProcessDAL { public string ProcessSingle<T>(T obj) { string tbFields = (obj as BaseEntity).TableFields; string fields = string.IsNullOrWhiteSpace(tbFields) ? "*" : tbFields; string sql = string.Format("select {0} from {1}", fields, obj.GetType().Name); string whereSql = null; PropertyInfo[] proInfos = obj.GetType().GetProperties(); List<SqlParameter> paras = new List<SqlParameter>(); foreach (var p in proInfos) { if (p.DeclaringType.Name.Equals("BaseEntity", StringComparison.OrdinalIgnoreCase)) { continue; } object val = p.GetValue(obj, null); if( val!= null && !string.IsNullOrWhiteSpace(val.ToString())) { whereSql += string.Format("{0}=@{1} and ", p.Name, p.Name); SqlParameter para = new SqlParameter(string.Format("@{0}", p.Name), val); paras.Add(para); } } whereSql = string.IsNullOrWhiteSpace(whereSql) ? null : string.Format(" where {0}", whereSql.Substring(0, whereSql.Length - 5)); sql = string.Format("{0} {1};", sql, whereSql); IList<T> source = DBHelper.FillCollectionDataReader<T>(sql, CommandType.Text, paras.ToArray()); return JsonHelper.JsonSerializer(source); } public string ProcessCollection<T>(List<T> obj) { return null; } }}
可以看到,只要把实体值填充了需要处理的字段会自动生成sql,子表集合可以在这里配置。
using System.Collections.Generic;using System.Reflection;using System.Data.SqlClient;using SFDC.BLL.Helper;using System.Data;using System.Text;using System;namespace SFDC.BLL.DALCommon{ /// <summary> /// 数据库DAL增加处理 /// </summary> public class InsertProcessDAL : IProcessDAL { public string ProcessSingle<T>(T obj) { return DBHelper.ExecuteQuery(GetSingleSql(obj), CommandType.Text, null); } public string ProcessCollection<T>(List<T> obj) { StringBuilder sb = new StringBuilder(); foreach (var v in obj) { sb.Append(GetSingleSql(v)); } return DBHelper.ExecuteQuery(sb.ToString(), CommandType.Text, null); } private string GetSingleSql<T>(T obj) { string sql = string.Format("insert into {0}", obj.GetType().Name); string fields = null; string values = null; PropertyInfo[] proInfos = obj.GetType().GetProperties(); foreach (var p in proInfos) { if (p.DeclaringType.Name.Equals("BaseEntity", StringComparison.OrdinalIgnoreCase)) { continue; } object val = p.GetValue(obj, null); if (val != null && !string.IsNullOrWhiteSpace(val.ToString())) { fields += string.Format("{0},", p.Name); values += string.Format("'{0}',", val); } } sql = string.Format("{0} ({1}) values ({2}); ", sql, fields.Substring(0, fields.Length - 1), values.Substring(0, values.Length - 1)); return sql; } }}
可以看到处理简单的增、删、改、查在后台是不用再写句代码的,也不需要配置xml文件,还算方便的,后续会加上事务处理和缓存,如果想要代码的可以留言,在CSDN不知道怎么上传代码,惭愧!(之前也写过CSDN的用户体验,可能是我这个用户笨了哈),欢迎指点出不足,谢谢!
0 0
- 一个简单Net 类似ORM工具
- 使用VB.Net写一个简单的数据访问层(不能称ORM):前言
- 使用VB.Net写一个简单的数据访问层(不能称ORM):CRUD操作
- 介绍一个C++的ORM工具ODB
- 介绍一个C++的ORM工具ODB
- 基于.Net平台的ORM实体类库管理 ORM工具 ORM向导
- 如何设计一个简单的ORM
- 一个简单的Android SQLite ORM框架
- 如何设计一个简单的C++ ORM
- .net ORM
- .NET 一个类似google的 分页。
- 一个自动生成Hibernate ORM映射文件的工具函数
- 自己写的一个类orm映射工具
- 服务器 介绍一个C++的ORM工具ODB
- InstantObjects是delphi上的一个不错的ORM框架,可以实现类似hibernate的功能。
- ORM,ASP.NET中ORM学习,ASP.NET中ORM学习心得,WEB2.0中ORM实现原理,Asp.net简单ORM示例源码详细讲解,Asp.net2.0:如何使用ObjectDataSource(配合ORM )
- ORM,ASP.NET中ORM学习,ASP.NET中ORM学习心得,WEB2.0中ORM实现原理,Asp.net简单ORM示例源码详细讲解,Asp.net2.0:如何使用ObjectDataSource(配合ORM )(二)
- Asp.net简单ORM示例源码详细讲解三
- stochastic regression
- 从服务器获取时间的年月日三级联动
- slf4j+log4j的初次使用
- 条款 22: 尽量用“传引用”而不用“传值”
- 多线程 -- 信号量和互斥量
- 一个简单Net 类似ORM工具
- 天龙八部回归记
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览
- ORACLE 用户密码过期
- spring Ioc 的学习
- ANROID SDK 搭建问题小结
- nginx配置多台tomcat目录
- 多线程 -- 线程基础
- 特征分解与奇异值分解