Home  >  Article  >  Database  >  How does MySQL query data through instantiated object parameters? (source code)

How does MySQL query data through instantiated object parameters? (source code)

云罗郡主
云罗郡主forward
2018-10-15 14:46:501949browse

The content of this article is about how MySQL queries data through instantiated object parameters? (Source code), it has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

public static string QueryByEntity<T>(T t) where T : new()
{    string resultstr = string.Empty;
    MySqlDataReader reader = null;    try
    {
        Type type = typeof(T);
        PropertyInfo[] properties = type.GetProperties();        string select = string.Format("Select * from {0} {1}", type.Name, "{0}");        string where = string.Empty;        foreach (PropertyInfo property in properties)
        {            var value = t.GetPropertyValue<T>(property);            if (value != null && !value.Equals(property.GetDefaultValue()))
            {                if (string.IsNullOrEmpty(where))
                {                    where = string.Format(" where {0}='{1}' ", property.Name, value);
                }                else
                {                    where = string.Format(" {0} and {1} = '{2}' ", where, property.Name, value);
                }
            }
        }        select = string.Format(select, where);

        MySqlConnection connection = OpenConnection();        if (connection == null)            return resultstr;
        MySqlCommand _sqlCom = new MySqlCommand(select, connection);
        reader = _sqlCom.ExecuteReader();
        List<T> tList = new List<T>();        while (reader.Read())
        {
            T t1 = new T();            foreach (PropertyInfo property in properties)
            {                if (!string.IsNullOrEmpty(reader[property.Name].ToString()))
                {
                    property.SetMethod.Invoke(t1, new object[] { reader[property.Name] });
                }
            }
            tList.Add(t1);
        }
        resultstr = JsonConvert.SerializeObject(tList);
    }    catch (Exception ex)
    {
        Logging.Error(string.Format("查询数据库失败,{0}", ex.Message));
    }    finally
    {        if (reader != null)
        {
            reader.Close();
            reader.Dispose();
        }
    }    return resultstr;
}internal static class ObjectExtend
{    public static object GetPropertyValue<T>(this object obj, PropertyInfo property)
    {
        Type type = typeof(T);
        PropertyInfo propertyInfo = type.GetProperty(property.Name);        if (propertyInfo != null)
        {            return propertyInfo.GetMethod.Invoke(obj, null);
        }        return null;
    }    public static object GetDefaultValue(this PropertyInfo property)
    {        return property.PropertyType.IsValueType ? Activator.CreateInstance(property.PropertyType) : null;
    }
}

By instantiating parameters, assigning values ​​to properties, passing objects in as parameters, and obtaining object names, column names, and column values ​​through reflection. The object name is required to be consistent with the table name, and the attribute name is consistent with the column name.

The above is the complete introduction. If you want to know more about MySQL video tutorial, please pay attention to the PHP Chinese website.


The above is the detailed content of How does MySQL query data through instantiated object parameters? (source code). For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:cnblogs.com. If there is any infringement, please contact admin@php.cn delete