zoukankan      html  css  js  c++  java
  • ORM泛型+反射

          #region 动态查询的方式使用泛型+反射
            //sql语句 select *from student
            public static List<T> Query(string where)
            {
                DataTable tb = new DataTable();
                List<T> list = new List<T>();
    
                //
                string sql = GetQuerySql();
                sql += where;
                //用反射赋值
                using (SqlConnection connection = new SqlConnection(con))
                {
                    connection.Open();
                    using (SqlCommand command = new SqlCommand(sql, connection))
                    {
                        SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(command);
                        sqlDataAdapter.Fill(tb);
                        //获取T的类型
                        Type type = typeof(T);
                        //循环循环行
                        for (int i = 0; i < tb.Rows.Count; i++)
                        {
                            //实例化T,每一次都需要实例化new 对象
                            Object obj = Activator.CreateInstance(type);
                            //循环列
                            for (int j = 0; j < tb.Columns.Count; j++)
                            {
                                //获取列的名称 student s_id  GetProperty("s_id")
                                PropertyInfo info = type.GetProperty(tb.Columns[j].ColumnName);//赋值了s_id
    
                                //判断类型 tb.Columns[j].DataType 获取数据库列的类型
    
                                #region 类型的判断并赋值
                                //int类型
    
    
                                if (tb.Columns[j].DataType == typeof(Int32))
                                {
                                    //有没有可能空值?
                                    if (tb.Rows[i][j] != null)
                                    {
                                        //obj.setValue(info,12);
                                        info.SetValue(obj, int.Parse(tb.Rows[i][j].ToString()), null);
                                    }
                                    else
                                    {
                                        //null值的情况
                                        info.SetValue(obj, 0, null);
                                    }
                                }
    
                                //float类型
                                else if (tb.Columns[j].DataType == typeof(float))
                                {
                                    //有没有可能空值?
                                    if (tb.Rows[i][j] != null)
                                    {
                                        info.SetValue(obj, float.Parse(tb.Rows[i][j].ToString()), null);
                                    }
                                    else
                                    {
                                        //null值的情况
                                        info.SetValue(obj, 0.0f, null);
                                    }
                                }
    
                                //datetime
                                else if (tb.Columns[j].DataType == typeof(DateTime))
                                {
                                    //有没有可能空值?
                                    if (tb.Rows[i][j] != null)
                                    {
                                        info.SetValue(obj, DateTime.Parse(tb.Rows[i][j].ToString()), null);
                                    }
                                    else
                                    {
                                        //null值的情况
                                        info.SetValue(obj, DateTime.Now, null);
                                    }
                                }
    
                                //double
                                else if (tb.Columns[j].DataType == typeof(double))
                                {
                                    //有没有可能空值?
                                    if (tb.Rows[i][j] != null)
                                    {
                                        info.SetValue(obj, double.Parse(tb.Rows[i][j].ToString()), null);
                                    }
                                    else
                                    {
                                        //null值的情况
                                        info.SetValue(obj, 0.00, null);
                                    }
                                }
                                else
                                {
                                    //string
    
                                    //有没有可能空值?
                                    if (tb.Rows[i][j] != null)
                                    {
                                        info.SetValue(obj, tb.Rows[i][j].ToString(), null);
                                    }
                                    else
                                    {
                                        //null值的情况
                                        info.SetValue(obj, "", null);
                                    }
                                }
                                #endregion
    
    
    
                            }
                            //将object 类型强转对应的类型
                            list.Add((T)obj);//(类型)强制转换
                        }
                    }
                }
                return list;
            }
            //获取sql
            public static string GetQuerySql()
            {
                Type type = typeof(T);
                //type.Name获取类的名称
                //无需实例化
                string sql = "select * from " + type.Name + " where 1=1 ";
                return sql;
            }
            #endregion
    
            #region 动态添加的操作
            public static int Insert(T models)
            {
                int flag = 0;
                //获取sql
                string sql = GetInsertSql(models);
                using (SqlConnection connection = new SqlConnection(con))
                {
                    connection.Open();
                    using (SqlCommand command = new SqlCommand(sql, connection))
                    {
                        flag = command.ExecuteNonQuery();
                    }
                }
                return flag;
            }
    
            public static string GetInsertSql(T models)
            {
                //已实例化的实体用GetType,如果未实例化的我们需要使用typeof
                Type type = models.GetType();//new 过的对象
                //先获取所有的字段
                PropertyInfo[] info = type.GetProperties();
                //这里是字段
                string field = "";
                //获取值
                string value = "";
                for (int i = 0; i < info.Length; i++)
                {
                    //有可能字段没有值,没有值的我们不添加info 是属性[i]第几个属性
                    if (info[i].GetValue(models) != null)
                    {
                        if (!info[i].Name.Equals("Id"))
                        {
                            //获取字段和值
                            if ((i + 1) == info.Length)//代表最后一个循环不要,
                            {
                                field += info[i].Name;
                                value += "'" + info[i].GetValue(models).ToString() + "'";//为什么没有用类型判断,
                            }
                            else
                            {
                                field += info[i].Name + ",";
                                value += "'" + info[i].GetValue(models).ToString() + "',";//为什么没有用类型判断,
                            }
                        }
                    }
                }
                //生成了sql语句
                string sql = "insert into " + type.Name + "(" + field + ") values(" + value + ")";
                return sql;
            }
            #endregion
    
            #region 动态修改的操作
            public static int Update(T models, string where)
            {
                int flag = 0;
                //获取sql
                string sql = GetUpdateSql(models, where);
    
                using (SqlConnection connection = new SqlConnection(con))
                {
                    connection.Open();
                    using (SqlCommand command = new SqlCommand(sql, connection))
                    {
                        flag = command.ExecuteNonQuery();
                    }
                }
                return flag;
            }
    
            public static string GetUpdateSql(T models, string where)
            {
                Type type = models.GetType();
                //获取所有的字段
                string updateStr = "";
                PropertyInfo[] propertyInfos = type.GetProperties();
                for (int i = 0; i < propertyInfos.Length; i++)
                {
                    if (propertyInfos[i].GetValue(models) != null)
                    {
                        if ((i + 1) == propertyInfos.Length)
                        {
                            updateStr += propertyInfos[i].Name + "='" + propertyInfos[i].GetValue(models) + "'";
                        }
                        else
                        {
                            updateStr += propertyInfos[i].Name + "='" + propertyInfos[i].GetValue(models) + "',";
                        }
                    }
                }
               //update biao set ziduan =zhi where userNAME=
                string sql = "update " + type.Name + " set " + updateStr + " where 1=1 " + where;
                return sql;
            }
    
            #endregion
    
            #region 动态删除
            public static int Delete(T models, string where)
            {
                int flag = 0;
                //获取sql
                string sql = GetDeleteSql(models, where);
    
                using (SqlConnection connection = new SqlConnection(con))
                {
                    connection.Open();
                    using (SqlCommand command = new SqlCommand(sql, connection))
                    {
                        flag = command.ExecuteNonQuery();
                    }
                }
                return flag;
            }
    
            //删除的sql语句
            public static string GetDeleteSql(T models, string where)
            {
                Type type = models.GetType();
                //获取所有的字段
    
                
                //delete from 表 where
                string sql = "delete from  " + type.Name + "  where 1=1 " + where;
                return sql;
            }
    
            #endregion
     //查询
            public List<EmpUserInfo> Query(string where)
            {
               return ORMDBhelper<EmpUserInfo>.Query(where); 
            }
            //插入
            public int Insert(EmpUserInfo info)
            {
                return ORMDBhelper<EmpUserInfo>.Insert(info);
            }
            //修改
            public int Update(EmpUserInfo info)
            {
                return ORMDBhelper<EmpUserInfo>.Update(info, " and id="+info.Id.ToString());
            }
            //删除
            public int Delete(EmpUserInfo info)
            {
                return ORMDBhelper<EmpUserInfo>.Delete(info, " and id=" + info.Id.ToString());
            }
    EmpUserInfoBll bll = new EmpUserInfoBll();
            // GET: api/Login
            [Route("api/query")]
            [HttpGet]
            public IHttpActionResult Query(string where)
            {
               return Ok(bll.Query(where));
            }
            [HttpPost]
            [Route("api/insert")]
            public int Insert(EmpUserInfo info)
            {
                return bll.Insert(info);
            }
            [HttpPost]
            [Route("api/update")]
            public int Update(EmpUserInfo info)
            {
                return bll.Update(info);
            }
            [HttpPost]
            [Route("api/delete")]
            public int DeletePost(EmpUserInfo info)
            {
                return bll.Delete(info);
            }
  • 相关阅读:
    Flume下读取kafka数据后再打把数据输出到kafka,利用拦截器解决topic覆盖问题
    idea 党用快捷键
    Idea 调试快捷键
    log4j实时将数据写入到kafka,Demo和相关的配置详解
    windows环境下,kafka常用命令
    ElasticSearch 基本概念
    elasticsearch REST API方式批量插入数据
    自提柜-资产管理柜
    10.智能快递柜(源码下载)
    9.智能快递柜SDK(串口型锁板)
  • 原文地址:https://www.cnblogs.com/ntg2/p/13215785.html
Copyright © 2011-2022 走看看