亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

寫一個MyORM--利用反射的方法

2019-11-14 13:45:21
字體:
來源:轉載
供稿:網友

本文的目的是為了更加深刻的理解反射。

ORM:Object Relational Mapping對象關系映射,是解決了面向對象語言和關系型數據庫不匹配的問題。

ORM是一種思想,實現這種思想的技術有很多,如C#中的Entity Framework,NHibernate,java中的Hibernate。

 

新建一個控制臺應用程序,添加一個類,Person.cs

1 public class Person2     {3        public int Id { get; set; }4        public string Name { get; set; }5        public int Age { get; set; }6     }

添加一個類,MyORM.cs

 1 public class MyORM 2     { 3         PRivate static readonly string connstr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString; 4         //假設:表名和類名一致 5         /// <summary> 6         /// 插入一條數據 7         /// </summary> 8         /// <param name="obj">插入的對象</param> 9         /// <returns>受影響函數</returns>10         public int Insert(object obj)11         {12             Type type = obj.GetType();13             string className = type.Name;//person14             //insert into Person(Name,Age)values("哈哈",10)15             PropertyInfo[] props = type.GetProperties();16             List<string> propNames = new List<string>();//屬性名列表17             List<string> paraNames = new List<string>();//參數名列表18             List<MySQLParameter> paramters = new List<MySqlParameter>();//參數19             foreach (PropertyInfo prop in props)20             {21                 string propName = prop.Name;22                 if (propName != "Id")23                 {24                     propNames.Add(propName);25                     paraNames.Add("@" + propName);26                    MySqlParameter para=new MySqlParameter(propName,prop.GetValue(obj));27                    paramters.Add(para);28                 }29             }30             StringBuilder sqlsb = new StringBuilder();31             sqlsb.Append("insert into ").Append(className).Append("(").Append(string.Join(",", propNames)).Append(")values(").Append(string.Join(",", paraNames)).Append(")");32            return MySqlHelper.ExecuteNonQuery(connstr, sqlsb.ToString(), paramters.ToArray());33         }34         //根據Id查詢35         public object SelectById(Type type, int id)36         {37            object obj= Activator.CreateInstance(type);38             //select * from Person where Id=139            string className = type.Name;40            string sql = "select * from " + className + " where Id=@Id";41            MySqlParameter para = new MySqlParameter("@Id",id);42           DataSet ds= MySqlHelper.ExecuteDataset(connstr, sql, para);43           DataTable table = ds.Tables[0];44           if (table.Rows.Count<=0)45           {46               return null;//沒有查到數據47           }48           else if (table.Rows.Count>1)49           {50               throw new Exception("出大問題了");51           }52           DataRow row = table.Rows[0];53           foreach (var prop in type.GetProperties())54           {55               prop.SetValue(obj,row[prop.Name]);56           }57           return obj;58         }59         60     }

這里有一個先決條件:類名要和數據庫表名一致

Insert方法實現的是只要傳一個類Object就可以將這個類對應的數據添加到數據庫表中,主要是通過反射的方法獲取類名、屬性名和屬性值,通過這些拼接sql語句,完成insert操作。

SelectById方法是根據類的Type和屬性Id的值,從數據庫中查詢數據并且賦值給Object.先從數據庫中查詢數據,通過反射的方法為object的每個屬性賦值,返回object.

為了事先規定Type的類型,我們還可以把SelectById方法更改為泛型的方法

  //根據Id查詢        public T SelectById<T>( int id) where T:new()//泛型約束有無參的構造函數        {            Type type = typeof(T);           //object obj= Activator.CreateInstance(type);            T obj = new T();            //select * from Person where Id=1           string className = type.Name;           string sql = "select * from " + className + " where Id=@Id";           MySqlParameter para = new MySqlParameter("@Id",id);          DataSet ds= MySqlHelper.ExecuteDataset(connstr, sql, para);          DataTable table = ds.Tables[0];          if (table.Rows.Count<=0)          {              return default(T);//沒有查到數據          }          else if (table.Rows.Count>1)          {              throw new Exception("出大問題了");          }          DataRow row = table.Rows[0];          foreach (var prop in type.GetProperties())          {              prop.SetValue(obj,row[prop.Name]);          }          return obj;//T類型的        }

 

在主程序中調用的代碼

 1            //插入數據到數據庫 2             Person p1 = new Person(); 3             MyORM orm = new MyORM(); 4             p1.Name = "哈哈"; 5             p1.Age = 20; 6             orm.Insert(p1); 7             Console.ReadKey(); 8  9             //根據查詢數據10              Person p2 = (Person)orm.SelectById(typeof(Person), 1);11             Console.WriteLine(p2.Name);12             Console.ReadKey();13 14            //泛型的方法查詢15           Person P3=orm.SelectById<Person>(1);16           Console.WriteLine(p3.Name);17           Console.ReadKey();

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品在线观看一区| 亚洲男人天堂2024| 亚洲欧美一区二区三区在线| 欧美精品午夜视频| 51色欧美片视频在线观看| 亚洲免费影视第一页| 久久综合免费视频| 国产精品综合不卡av| 国产精品极品美女粉嫩高清在线| 日本道色综合久久影院| 久久精品国产99国产精品澳门| 国产成人精品视频| 午夜精品久久久久久久久久久久久| 国产日韩欧美91| 日韩最新免费不卡| 国产伊人精品在线| 欧美高跟鞋交xxxxxhd| 日本久久中文字幕| 久久免费高清视频| 日韩精品在线私人| 一区二区亚洲欧洲国产日韩| 日韩免费在线视频| 3344国产精品免费看| 精品呦交小u女在线| 久久亚洲欧美日韩精品专区| 日本乱人伦a精品| 欧美风情在线观看| 亚洲欧美日本另类| 在线播放日韩专区| 午夜精品福利在线观看| 欧美日韩免费观看中文| 岛国av在线不卡| 亚洲欧美中文日韩在线| 成人伊人精品色xxxx视频| 国产精品三级久久久久久电影| 91精品国产综合久久香蕉的用户体验| 亚洲欧美中文日韩在线| 日韩视频永久免费观看| 中文字幕亚洲一区二区三区五十路| 91精品啪aⅴ在线观看国产| 日韩中文字幕视频在线观看| 136fldh精品导航福利| 欧美中文字幕视频在线观看| 中文字幕久热精品视频在线| 欧美亚洲视频在线观看| 日韩欧美成人精品| 国产男女猛烈无遮挡91| 日韩视频精品在线| 久久免费观看视频| 亚洲成人av资源网| 91国产视频在线| 国产一区二区在线播放| 中文字幕视频在线免费欧美日韩综合在线看| 国产91久久婷婷一区二区| 欧美一级淫片videoshd| 国产在线高清精品| 中文字幕亚洲自拍| 日韩精品福利网站| 国产成人精品国内自产拍免费看| 欧美孕妇孕交黑巨大网站| 日韩av网址在线观看| 欧美成人精品xxx| 亚洲综合中文字幕在线观看| 亚洲欧美中文字幕| 伊人亚洲福利一区二区三区| 国内精品免费午夜毛片| 国产精品久久久av久久久| 欧美精品videossex88| 中文字幕日韩av| 日本一区二区三区在线播放| 久久综合久久八八| 中日韩午夜理伦电影免费| 日韩综合视频在线观看| 在线成人激情黄色| 亚洲欧美激情精品一区二区| 日韩av手机在线看| 久久777国产线看观看精品| 精品国产一区二区在线| 精品国内亚洲在观看18黄| 久久久久久久久久久网站| 亚洲精品日韩丝袜精品| 国产欧美va欧美va香蕉在线| 国产一区二区免费| 亚洲日本欧美日韩高观看| 国产一区二区免费| 97香蕉久久超级碰碰高清版| 国产午夜精品久久久| 中文字幕亚洲情99在线| 亚洲人精选亚洲人成在线| 黑人与娇小精品av专区| 国产精品91一区| 亚洲男人天堂九九视频| 欧美一级淫片videoshd| 日韩大片免费观看视频播放| 欧洲中文字幕国产精品| 777国产偷窥盗摄精品视频| 亚洲天堂av在线免费| 欧美第一黄网免费网站| 欧美日韩国产在线| 国产69精品99久久久久久宅男| 国产欧美最新羞羞视频在线观看| 亚洲国产精品yw在线观看| 久久99亚洲精品| 毛片精品免费在线观看| 欧美成aaa人片在线观看蜜臀| 久久理论片午夜琪琪电影网| 色99之美女主播在线视频| 疯狂欧美牲乱大交777| 亚洲va码欧洲m码| 国产精品吊钟奶在线| 久久国产精品久久国产精品| 精品视频久久久| 日韩在线视频线视频免费网站| 日韩av毛片网| 欧美精品在线观看91| 97香蕉超级碰碰久久免费软件| 亚洲最大福利网站| 97视频在线观看成人| 欧美日韩精品在线播放| 精品国产一区二区三区久久狼黑人| 97精品在线观看| 日本精品视频在线观看| 午夜美女久久久久爽久久| 国产午夜精品久久久| 亚洲自拍在线观看| 亚洲影视九九影院在线观看| 亚洲美女性生活视频| 亚洲免费电影在线观看| 亚洲国产99精品国自产| 亚洲精品视频播放| 国产91精品网站| 国产精品极品在线| 亚洲人成亚洲人成在线观看| 国产精品第100页| 久久视频在线直播| 国语自产精品视频在线看| 亚洲黄一区二区| 成人免费观看a| 亚洲国产欧美一区二区三区同亚洲| 91精品91久久久久久| 久久精品中文字幕免费mv| 国产欧美久久一区二区| 欧美性精品220| 日本aⅴ大伊香蕉精品视频| 2019亚洲日韩新视频| 国产情人节一区| 91干在线观看| 国产精彩精品视频| 国产精品视频一区国模私拍| 欧美激情乱人伦一区| 久久亚洲影音av资源网| 国产精品高清在线| 91网站免费观看| 欧美视频在线观看 亚洲欧| 午夜精品一区二区三区视频免费看| 日韩中文字幕亚洲| www.欧美免费| 日本精品久久久久久久| 国产主播在线一区| 久久福利视频导航| 日韩av色在线| 成人免费淫片视频软件| 久久久久久久久久国产精品| 亚洲精品电影网|