万网制作淘宝客网站,网站建设定义是什么意思,电商运营培训课程有哪些,wordpress 电商版本ORM 大家都知道#xff0c; .Net 是EF 还有一些其他的ORM 从JAVA 中移植过来的 有 #xff0c; 大神自己写的也有 不管ORM 提供什么附加的 乱七八糟的功能 但是 最主要的 还是 关系映射 的事情。 我自己一直在使用ORMDapper 这个很小的ORM 第一次看到这个ORM 是通过一… ORM 大家都知道 .Net 是EF 还有一些其他的ORM 从JAVA 中移植过来的 有 大神自己写的也有 不管ORM 提供什么附加的 乱七八糟的功能 但是 最主要的 还是 关系映射 的事情。 我自己一直在使用ORMDapper 这个很小的ORM 第一次看到这个ORM 是通过一个帖子中 有人搞了个常见ORM 效率排行榜 自己也试了试 然后就看上 ORMDapper 这个了 这是把轻量级发挥到极致了 只有一个 96KB 的 一个Class 文件。其中还有很多是空格和注释信息。 最近在学习研究JAVA 觉得JAVA 比.NET 有趣点。 也为了 以后 .NET 不行了 还能弄JAVA 直接上代码 private static string ConnectionString **;/// summary/// 更新数据 没有sql参数就直接执行 /// /summary/// param namesql 需要执行的 sql /param/// param nameo传递的实体类对象 要求该类中字段必须和 sql参数名称一致 不区分大小写 /param/// returns/returnspublic static int UpdateModel(string sql, object o){var s sql.Split();return Update(sql, s.Length 1 ? null : GetSqlParameters(o, s));}/// summary/// 查询数据/// /summary/// typeparam nameT映射的实体类/typeparam/// param namesql执行的SQL语句/param/// param nameo传递的实体类对象 要求该类中字段必须和 sql参数名称一致 不区分大小写 /param/// returns/returnspublic static ListT SeleteModelT(string sql, object o) where T : class, new(){var s sql.Split();return SelectT(sql, s.Length 1 ? null : GetSqlParameters(o, s));}/// summary/// 动态创建SqlParameter 对象/// /summary/// param nameo传递的实体类对象 要求该类中字段必须和 sql参数名称一致 不区分大小写 /param/// param names切割后的SQL 语句/param/// returns/returnsprivate static SqlParameter[] GetSqlParameters(object o, string[] s){s s.Select(c c.Split( )[0].Trim()).ToArray(); Type t o.GetType();if (t typeof(object))throw new Exception(UpdateModel 传递的类型是OBJECT 类型);// 反射 读取字段 验证是否是 SQL 中的参数var tlist t.GetFields(BindingFlags.Public | BindingFlags.Instance).Where(c c.GetValue(o) ! null s.FirstOrDefault(a a.ToLower() c.Name.ToLower()) ! null).ToList();// 判断得到的数据 是否和 需要的数据 数量一致if (tlist.Count() ! s.Count() - 1)throw new Exception(传递的实体中有值参数 和 sql 中需要的 数量不相等);SqlParameter[] sp new SqlParameter[tlist.Count()];for (int i 0; i s.Length - 1; i){sp[i] new SqlParameter(s[i 1].Trim(), tlist.FirstOrDefault(c c.Name.ToLower() s[i 1].ToLower()).GetValue(o));}return sp;}private static ListT SeleteModelT(SqlDataReader data) where T : class, new(){// 获取列 个数int iFieldCount data.FieldCount;ListT list new ListT();while (data.Read()){T tType new T();for (int i 0; i iFieldCount; i){// 反射注入字段值string dataName data.GetName(i);FieldInfo fie tType.GetType().GetField(dataName);if (fie null)continue;fie.SetValue(tType, data[dataName]);}list.Add(tType);}return list;}private static ListT SelectT(string sql, SqlParameter[] sp) where T : class, new(){using (SqlConnection conn new SqlConnection(ConnectionString)){using (SqlCommand com new SqlCommand(sql, conn)){conn.Open();if (sp ! null)com.Parameters.AddRange(sp);return SeleteModelT(com.ExecuteReader());}}}private static int Update(string sql, SqlParameter[] sp){using (SqlConnection conn new SqlConnection(ConnectionString)){using (SqlCommand com new SqlCommand(sql, conn)){conn.Open();if (sp ! null) com.Parameters.AddRange(sp); return com.ExecuteNonQuery();}}} 调用示例 public class TestCalss{public static void Main(){string sql SELECT TOP 1000 [ID],[ExpressID],[OrderID],[MailCode] ,[SendXML],[SendFlag],[SendCount] FROM [SendStateTest] where idid and SendXMLSendXML ;string sql2 update [DangDang_SendStateTest] set SendXML0000 where idid ; int i AdoConnection.UpdateModel(sql2, new Na() { ID 1 });ListNa a AdoConnection.SeleteModelNa(sql, new Na() { ID 1, SendXML 0000 });Console.WriteLine(a); }public class Na{ public int ID; public string ExpressID; public string OrderID; public string MailCode; public string SendXML; public int SendFlag; public int SendCount;} }只是提供一种自己做一个简单的 三分之一 “ORM” 的 方式 没有连接池 还得写Sql 说实话自己弄的在好也不如 网上大家都在用的 “ORM” 框架 可以在这个简单的 “ORM” 上经行加工 拓展 比如 支持存储过程 不限定数据库 SQL 语句 分类 等等 有兴趣的朋友可以自己做做 我就不弄了。 如果你使用过多种ORM 你就会发现 越是功能全 越是强大的ORM 效率就越低 因为不管是哪个ORM 最后还是对JDBC/ADO.NET 的加工封装 。 EF 效率是低 但是 他的 是 我弄过的一下ORM框架中 是功能最全 除去效率外 其他都很强大。 转载于:https://www.cnblogs.com/atliwen/p/4807303.html