DataReader转实体类的方法

简介: 都在注释里了,不多说了        ///         /// DataReader转泛型        ///         /// 传入的实体类        /// DataReader对象        ///         public static IList ReaderT...

都在注释里了,不多说了

         ///   <summary>
        
///  DataReader转泛型
        
///   </summary>
        
///   <typeparam name="T"> 传入的实体类 </typeparam>
        
///   <param name="objReader"> DataReader对象 </param>
        
///   <returns></returns>
         public  static IList<T> ReaderToList<T>( this IDataReader objReader)
        {
             using (objReader)
            {
                List<T> list =  new List<T>();

                 // 获取传入的数据类型
                Type modelType =  typeof(T);

                 // 遍历DataReader对象
                 while (objReader.Read())
                {
                     // 使用与指定参数匹配最高的构造函数,来创建指定类型的实例
                    T model = Activator.CreateInstance<T>();
                     for ( int i =  0; i < objReader.FieldCount; i++)
                    {
                         // 判断字段值是否为空或不存在的值
                         if (!IsNullOrDBNull(objReader[i]))
                        {
                             // 匹配字段名
                            PropertyInfo pi = modelType.GetProperty(objReader.GetName(i), BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
                             if (pi !=  null)
                            {
                                 // 绑定实体对象中同名的字段  
                                pi.SetValue(model, CheckType(objReader[i], pi.PropertyType),  null);
                            }
                        }
                    }
                    list.Add(model);
                }
                 return list;
            }
        }

         ///   <summary>
        
///  对可空类型进行判断转换(*要不然会报错)
        
///   </summary>
        
///   <param name="value"> DataReader字段的值 </param>
        
///   <param name="conversionType"> 该字段的类型 </param>
        
///   <returns></returns>
         private  static  object CheckType( object value, Type conversionType)
        {
             if (conversionType.IsGenericType && conversionType.GetGenericTypeDefinition().Equals( typeof(Nullable<>)))
            {
                 if (value ==  null)
                     return  null;
                System.ComponentModel.NullableConverter nullableConverter =  new System.ComponentModel.NullableConverter(conversionType);
                conversionType = nullableConverter.UnderlyingType;
            }
             return Convert.ChangeType(value, conversionType);
        }

         ///   <summary>
        
///  判断指定对象是否是有效值
        
///   </summary>
        
///   <param name="obj"></param>
        
///   <returns></returns>
         private  static  bool IsNullOrDBNull( object obj)
        {
             return (obj ==  null || (obj  is DBNull)) ?  true :  false;
        }


///   <summary>
        
///  DataReader转模型
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="objReader"></param>
        
///   <returns></returns>
         public  static T ReaderToModel<T>( this IDataReader objReader)
        {

             using (objReader)
            {
                 if (objReader.Read())
                {
                    Type modelType =  typeof(T);
                     int count = objReader.FieldCount;
                    T model = Activator.CreateInstance<T>();
                     for ( int i =  0; i < count; i++)
                    {
                         if (!IsNullOrDBNull(objReader[i]))
                        {
                            PropertyInfo pi = modelType.GetProperty(objReader.GetName(i), BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
                             if (pi !=  null)
                            {
                                pi.SetValue(model, CheckType(objReader[i], pi.PropertyType),  null);
                            }
                        }
                    }
                     return model;
                }
            }
             return  default(T);
        }
目录
相关文章
|
8月前
反射机制测试实体类User
反射机制测试实体类User
|
8月前
|
SQL Java 数据库连接
MyBatis练习(1)数据表中的数据封装成JavaBean
MyBatis练习(1)数据表中的数据封装成JavaBean
72 0
|
7月前
|
存储 Java 数据库连接
深入探索Hibernate与JPA:Java对象与数据库表的桥梁
【6月更文挑战第25天】Java ORM如Hibernate和JPA简化了数据库交互。在电商系统案例中,JPA注解如`@Entity`、`@Table`、`@Id`定义了对象-表映射。Hibernate利用这些定义实现持久化,如`Session.save()`保存用户对象至数据库,降低了复杂性并提升了开发效率。
62 0
|
8月前
|
Java 关系型数据库 MySQL
实体类?Dao接口?Mapper映射文件?都别写了!!!用这种方法就可以
实体类?Dao接口?Mapper映射文件?都别写了!!!用这种方法就可以
|
XML SQL Java
使用MyBatis时,解决表字段和实体类属性不一致问题
使用MyBatis时,解决表字段和实体类属性不一致问题
399 2
使用MyBatis时,解决表字段和实体类属性不一致问题
|
8月前
|
Java 数据库连接 mybatis
mybatis 查询结果返回 list<pojo> 和 一个 pojo 类 的一些坑
mybatis 查询结果返回 list<pojo> 和 一个 pojo 类 的一些坑
263 0
|
Java 数据库连接 数据库
MyBatis中解决实体类属性和数据库表的列名不一致的操作
MyBatis中解决实体类属性和数据库表的列名不一致的操作
|
JSON 数据格式
将Object类对象转为对应实体类对象
将Object类对象转为对应实体类对象
477 0
|
Java 数据库连接 数据库
Hibrenate实体类对象状态
Hibrenate实体类对象状态
90 0