特性与反射形成sql语句 一

最近需要使用sql语句查询数据库 但是不想每次都写数据库读写所以查了下反射

就想使用反射出来某个实体的所有属性,然后根据属性查询并赋值

首先,需要一个实体类才能反射出数据库对应的字段,

但是开始写属性的时候,我看见特性蛮好用的,可以实现切面编程.

我也查了特性,但是网上这方面资料不多,大多都是介绍,只能自己慢慢摸索了.

    [Model.Context.SelectContext]
    public class Entity
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }

弄一个实体类,设置一个特性

Context.SelectContext

可以表示可以用来查询数据

接下来定义SQLHelp类查询

<span style="white-space:pre">	</span>/// <summary>
        /// 查询集合
        /// </summary>
        /// <param name="T">查询的实体 new()</param>
        /// <param name="sql">sql语句</param>
        /// <param name="result">生产实体执行的操作</param>
        /// <param name="param">可变参数</param>
        /// <returns>返回集合</returns>
        public static IEnumerable<T> SelectReader<T>(string sql, Func<System.Data.Common.DbDataReader, T> result, params System.Data.Common.DbParameter[] param)
           where T : class
        {
            using (SqlConnection con = new SqlConnection(connString))
            {
                SqlCommand cmd = new SqlCommand(sql, con);
                cmd.Connection.Open();
                if (param != null && param.Length > 0)
                    cmd.Parameters.AddRange(param);
                SqlDataReader dr = cmd.ExecuteReader();
                var list = new List<T>();
                while (dr.Read())
                {
                    T t = result(dr);//产生实体类委托,根据sqlDateReader产生一个实体类
                    if (t != null)
                        list.Add(t);
                }
                dr.Close();
                return list;
            }
        }

一个查询方法根据sql语句来返回一个集合

下一篇写sql辅助类,用来定义一个sql操作的模板

时间: 2024-08-07 18:05:22

特性与反射形成sql语句 一的相关文章

C#根据反射生成sql语句(Update语句)

今天有人问我Update语句怎么搞,想了一下大致思路就是用特性去标识一下,主键,然后再去用反射的方式拼sql语句. 想着晚上再写,又想了想的确好久没写博客了,也好久没正儿八经写代码了,就顺手给写了下来. 一.主键特性 /// <summary> /// 主键特性(在实体类的上方加这个特性,指定该类的主键名称) /// </summary> [AttributeUsage(AttributeTargets.Class)] public class PrimaryKeyAttribut

利用反射生成SQL语句

// 修改学员信息的方法 public bool ModifyStudent(MODEL.Students model) { // 利用反映获取类对所有属性,用来动态生成SQL语句 StringBuilder sbSql = new StringBuilder("update Students set "); // 先获得model 的Type类型 Type modeType = model.GetType(); // 通过Type类型得到它所有的公开属性 PropertyInfo[]

根据反射生成SQL语句

1 /** 2 * 基础查询语句 3 * 返回类型的属性字符串Sql 4 * @author: InkYi 5 * 修改时间:2016年5月11日 - 上午10:06:00<br/> 6 * 功能说明:<br/> 7 * @param clazz 8 * @return "id,name,sex....." 9 */ 10 private String baseSelectSQL(Class clazz){ 11 StringBuffer sb = new St

常用SQL语句(Mysql)总结

1.库 1)创建数据库:create Database  database_name; database_name:(1)首字母不能是数字.$.空格.特殊字符.保留字 (2)最大128字节 (3)由字母.数字.下划线.@和$组成 2)查看数据库:show databases; 3)选择数据库:use  database_name ; 4)删除数据库:drop database  database_name; 2.存储引擎 1)查看所支持存储引擎:(1)show engines   (2)show

SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划

我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为复用执行计划的性能比生成执行计划的性能要高很多,所以SqlServer的这一特性可以大大提高Sql语句的执行效率.特别是对于存储过程,因为存储过程的执行计划是在存储过程第一次执行的时候生成的,存储过程的执行计划生成后就会被缓存到SqlServer的执行计划列表中,如果以后存储过程再被执行,那么存储过

使用Java反射(Reflect)、自定义注解(Customer Annotation)生成简单SQL语句

这次给大家介绍一下在Java开发过程中 使用自定义注解开发:主要知识点:            1.反射            主要用于提取注解信息            2.自定义异常  主要是为了自己自定义一个异常信息            3.自定义注解  本次重点 学会如何自定义注解以及如何使用反射提取注解信息运用到实际开发下图表示在Java中注解的含义以及注解的分类和如何解析注解 通常我们使用自定义注解一般使用4中元注解即:@Target@Retention@Documented@In

反射生成INSERT多个对象的SQL语句

场景 下订单时,将生成一个订单和对应的多个订单详情,即一个 order 对象和多个 orderinfo 对象. 多个 orderinfo 对象在落库时,DAO 层向上层调用的接口入参是 List<OrderInfo>,那么接口的实现就需要将 List<OrderInfo> 转为一条完整的 SQL 语句. 如: insert into person(name, age, info) values ('18岁的郑斌', 18, '大一'),('22岁的郑斌', 22, '大四'); 下

java反射获取注解并拼接sql语句

先建两个注解 分别为 Table 和 Column package com.hk.test; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.TYPE}) @Retention(Ret

通过反射,获得数据库增删改查的sql语句的方法

package gxa.bj.util; import java.lang.reflect.*; public class BeanUtil {// 根据某些条件查询语句 public static String getSelectSQL(Object obj) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetExc