table 转实体

 public class Table2Entity<T> where T : class,new()
    {
        public static List<T> GetEntitys(DataTable dt)
        {
            Dictionary<string, string> columns = new Dictionary<string, string>();
            foreach (DataColumn item in dt.Columns)
            {
                columns.Add(item.ColumnName.Trim().ToLower(), item.ColumnName);
            }
            List<T> result = new List<T>();
            var proptetis = typeof(T).GetProperties(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
            foreach (DataRow dr in dt.Rows)
            {
                T obj = new T();
                foreach (var item in proptetis)
                {
                    var attributes = item.GetCustomAttributes(typeof(RenameAttribute), true);
                    var columnName = (attributes != null && attributes.Length > 0) ? ((RenameAttribute)(attributes[0])).Name.Trim().ToLower() : item.Name.Trim().ToLower();
                    if (columns.Keys.Contains(columnName))
                    {
                        var mt = item.GetSetMethod(true);
                        var value = dr[columns[columnName]];
                        if (value == null || value == DBNull.Value || string.IsNullOrWhiteSpace(value.ToString())) continue;
                        if (item.PropertyType == typeof(string))
                            mt.Invoke(obj, new object[] { value.ToString() });
                        else if (item.PropertyType == typeof(int) || item.PropertyType == typeof(int?))
                            mt.Invoke(obj, new object[] { Convert.ToInt32(value) });
                        else if (item.PropertyType == typeof(long) || item.PropertyType == typeof(long?))
                            mt.Invoke(obj, new object[] { Convert.ToInt64(value) });
                        else if (item.PropertyType == typeof(double) || item.PropertyType == typeof(double?))
                            mt.Invoke(obj, new object[] { Convert.ToDouble(value) });
                        else if (item.PropertyType == typeof(decimal) || item.PropertyType == typeof(decimal?))
                            mt.Invoke(obj, new object[] { Convert.ToDecimal(value) });
                        else if (item.PropertyType == typeof(DateTime) || item.PropertyType == typeof(DateTime?))
                            mt.Invoke(obj, new object[] { Convert.ToDateTime(value) });
                        else if (item.PropertyType == typeof(float) || item.PropertyType == typeof(float?))
                            mt.Invoke(obj, new object[] { float.Parse(value.ToString()) });
                        else if (item.PropertyType == typeof(bool))
                            mt.Invoke(obj, new object[] { bool.Parse(value.ToString()) });
                        else if (item.PropertyType.BaseType == typeof(System.Enum))
                        {
                            mt.Invoke(obj, new object[] { Convert.ToInt32(value) });
                        }
                    }
                }
                result.Add(obj);
            }
            return result;
        }
    }
时间: 2024-08-14 21:56:33

table 转实体的相关文章

JPA实体类中的注解

@Entity 标注于实体类上,通常和@Table是结合使用的,代表是该类是实体类@Table 标注于实体类上,表示该类映射到数据库中的表,没有指定名称的话就表示与数据库中表名为该类的简单类名的表名相对应,如果是逆向生成表的话就会以简单类名作为表名 如果指定名称,例如@Table(name="tb_user"),就表示映射到数据库中的tb_userz这个表:@Id 标注于属性上,通常是在get方法上,也可以在属性的声明上. 用于表示该属性作为ID主键@GeneratedValue 主键

BaseEntity实体的继承:@MappedSuperclass

阅读更多 在创建实体时,经常有重复的id和时间的属性要创建,所以想弄一个父类,然后所有实体继承,但是碰到了问题,就用到了@MappedSuperclass,它的的用法 用在实体的继承过程中的父类上: 如: IdEntity.java Java代码   package com.zpf.test.Entity; import java.io.Serializable; import java.util.Date; import javax.persistence.Column; import jav

JPA学习笔记(3)——JPA注解

Entity Table Id GeneratedValue Basic Column Transient Temporal @Entity @Entity 标注用于实体类声明语句之前.指出该Java 类为实体类,将映射到指定的数据库表. @Table 当实体类与其映射的数据库表名不同名时须要使用 @Table 标注说明,该标注与 @Entity 标注并列使用,置于实体类声明语句之前,可写于单独语句行.也可与声明语句同行. @Table 标注的经常使用选项是 name.用于指明数据库的表名 @T

SSM搭建

发现项目源码没有了,只好把搭建时的资料发上来,希望用到的时候还能记得~~~ 按照本项目从无到有,起于项目创建,通过JDBC测试数据库连接,使用myBatis映射数据库.新建项目,除去JDBC,加入spring framework. SSM(Spring+SpringMVC+myBatis)整合 1. 基本概念 1.1   Spring Spring是一个开源框架,轻量级java开发框架.使用IoC(控制反转)容器将各个对象隔离降耦,后来提出IoC的本质概念injection dependency

EF Code-First 学习之旅 Code First Conventions

协定是一系列的默认规则用来自动配置领域中的概念模型 1:类型发现 Code-First对包含DBSet属性的类型创建表(包括这些类型的所有引用类型) public class Student { public Student() { } public int StudentID { get; set; } public string StudentName { get; set; } public DateTime DateOfBirth { get; set; } public byte[]

框架——hibernate

2.构建hibernate框架 配置文件(核心).xml ========================================================================================== <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Map

利用HibernateTools从数据库表生成带注解的POJO

引用:http://www.cnblogs.com/mingziday/p/4475124.html 在SSH框架中,如果先设计好了数据库,那么下一步就需要从数据库Table生成实体java类和hbm.xml配置文件.在最新的开发框架中,已经支持使用注解,从而避免了繁琐的hbm.xml配置,而且我们可以借助HibernateTools工具完成从Table到实体Java类的转换. 1.首先把HibernateTools插件安装到Eclipse上 打开Eclispe,按照如下操作完成插件安装 Hel

Hibernate映射文件

hibernate映射文件 作用:将实体类和数据库中的表建立起联系 每个数据库表对应一个映射文件和实体类 1 根节点<hibernate-mapping> package属性表示实体类所在的包,可以省略 <hibernate-mapping package="com.bdqn.hiber.bean"> 2 <class>节点 name属性表示实体类的类名(当根节点的package属性省略时,名称则要写成却类名,例:com.xsh.bean.User)

Hibernate -- xxx.hbm.xml ORM元数据 表对象关系映射文件

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- ORM元数据 表对象关系映射文件 p