Loading

一、手写ORM实现数据库查询

ORM:对象关系映射Object Relational Mapping(简称ORM)
如果数据库对应几十个实体类就是几十个表该怎么查询呢
利用反射加泛型手写ORM
建好数据库Student
先配置好数据库连接
 <connectionStrings>
    <add name="Student" connectionString="server=.; Database=Student;uid=sa;pwd=123;"/>
  </connectionStrings>
创建sqlserverDBhelper类,编写方法:
 public T select<T>(int id)
        {
            Type type = typeof(T);//获取到具体类型
           string  filedstring=string.Join(",",type.GetProperties().Select(c => string.Format("[{0}]", c.Name)));//根据type获取到属性名称,用逗号连接起来便于查询
            string tableName = type.Name;//获取到表名
            object obj = Activator.CreateInstance(type);//初始化字段赋原始值
            string sql = string.Format("select {0} from {1} where ID={2} ",filedstring,tableName,id);
            SqlCommand cmd = new SqlCommand(sql,conn);
            if(conn.State==System.Data.ConnectionState.Closed)
            {
                conn.Open();
            }
            SqlDataReader reader=cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
            if(reader.Read())//如果读取到数据
            {
                foreach (var item in type.GetProperties())//获取属性
                {
                    object ovule = reader[item.Name];//通过reader获取字段名称的值
                    item.SetValue(obj, ovule);//给每一个字段赋值
                    Console.WriteLine("{0}:{1}", item.Name, item.GetValue(obj));
                }
            }
            conn.Close();
            return (T)obj;
        }
局部变量信息:
调用:
sqlserverDBhelper sqlserverD = new sqlserverDBhelper();//实例化
 sqlserverD.select<Student>(1); //指定实体类Student  ID参数
效果:
 
posted @ 2020-06-12 09:32  炒焖煎糖板栗  阅读(198)  评论(0编辑  收藏  举报