zoukankan      html  css  js  c++  java
  • 数据映射工具 AssionMapper

         这是一个轻量的映射工具,不可与ORM做比较。它不参与到DB。一般用来配合SqlHelper来使用。目前实现的功能有:DataReader到List的映射、

    DataReader到T的映射、List到List的映射、T到T的映射、T到数据库参数的映射。以上这些都是平时操作数据库工作量最大的部分,而且都是重

    复的没有含量的工作。其实真正写SQL并不占用多少工作量。

         下面来说下如何使用,并写几个各个功能下的使用示例。

         首先下载:Assionsoft.AssionMapper 程序集,所有映射功能全部在这个程序集下面。不需要进行XML的配置。

         1、我们不采取XML配置的映射形式,而是在实体类上标上特性的方式。通过元数据标识映射。比如下面的学生实体:

        

    [ResultMap("SysNo")]//参与单体DataReader返回映射,如果[ResultMap]无参则默认已属性名匹配
            [ResultsMap("SysNo")]//参与集合DataReader返回映射,如果[ResultMap]无参则默认已属性名匹配
            [ObjectMap]//参与对象映射
            [ParameterMap]//参与数据库参数映射
            public int SysNo { getset; }
            [ResultMap(
    "Name")]//参与单体DataReader返回映射,如果[ResultMap]无参则默认已属性名匹配
            [ResultsMap("Name")]//参与集合DataReader返回映射,如果[ResultMap]无参则默认已属性名匹配
            [ObjectMap]//参与对象映射
            [ParameterMap("Name")]//参与数据库参数映射
            public string Name { getset; }
            [ResultMap(
    "Gender")]//参与单体DataReader返回映射,如果[ResultMap]无参则默认已属性名匹配
            [ResultsMap("Gender")]//参与集合DataReader返回映射,如果[ResultMap]无参则默认已属性名匹配
            [ObjectMap]//参与对象映射
            [ParameterMap]//参与数据库参数映射
            public bool Gender { getset; }
            [ResultMap(
    "Age")]//参与单体DataReader返回映射,如果[ResultMap]无参则默认已属性名匹配
            [ResultsMap("Age")]//参与集合DataReader返回映射,如果[ResultMap]无参则默认已属性名匹配
            [ObjectMap]//参与对象映射
            [ParameterMap]//参与数据库参数映射
            public int Age { getset; }
            [ResultMap(
    "Birthday")]//参与单体DataReader返回映射,如果[ResultMap]无参则默认已属性名匹配
            [ResultsMap("Birthday")]//参与集合DataReader返回映射,如果[ResultMap]无参则默认已属性名匹配
            [ObjectMap]//参与对象映射
            [ParameterMap]//参与数据库参数映射
            public DateTime Birthday { getset; }

           2、数据库插入增、删、改的参数映射,我们通过委托把Common.Parameter.AddWithValue传给方法进行与student的映射。

    Student student = new Student() { Name = "张三", Gender = true, Age = 25, Birthday = DateTime.Now };
                SqlConnection conn 
    = new SqlConnection("server=ASSIONYANG-PCJ\\SQLEXPRESS;uid=sa;pwd=123;database=Testing");
                conn.Open();
                SqlCommand cmd 
    = new SqlCommand();
                cmd.Connection 
    = conn;
                cmd.CommandText 
    = "INSERT INTO ([Name],[Gender],[Age],[Birthday]) VALUES (@Name,@Gender,@Age,@Birthday)";
                ParameterMap.SqlParameterMap
    <Student>(cmd.Parameters.AddWithValue, student);//生成数据库参数
                cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                conn.Close();

                 3、DataReader返回集合的映射

    IList<Student> studentList = new List<Student>();
                SqlConnection conn 
    = new SqlConnection("server=ASSIONYANG-PCJ\\SQLEXPRESS;uid=sa;pwd=123;database=Testing");
                conn.Open();
                SqlCommand cmd 
    = new SqlCommand();
                cmd.Connection 
    = conn;
                cmd.CommandText 
    = "SELECT [SysNo],[Name],[Gender],[Age],[Birthday] FROM Student ORDER BY [SysNo] DESC";
                SqlDataReader dataReader 
    = cmd.ExecuteReader();
                studentList 
    = ResultMap.GetIList<Student>(dataReader);//从DataReader返回实体集合
                dataReader.Close();
                conn.Close();

                   4、DataReader 返回实体的映射

                Student student = new Student();
                SqlConnection conn 
    = new SqlConnection("server=ASSIONYANG-PCJ\\SQLEXPRESS;uid=sa;pwd=123;database=Testing");
                conn.Open();
                SqlCommand cmd 
    = new SqlCommand();
                cmd.Connection 
    = conn;
                cmd.CommandText 
    = "SELECT [SysNo],[Name],[Gender],[Age],[Birthday] FROM Student WHERE [SysNo]=@SysNo";
                ParameterMap.SqlParameterMap
    <Student>(cmd.Parameters.AddWithValue, student);
                SqlDataReader dataReader 
    = cmd.ExecuteReader();
                student 
    = ResultMap.Load<Student>(dataReader);//从DataReader返回单个实体
                dataReader.Close();
                conn.Close();

                    5、集合TO 集合的映射

               

                IList<Student> studentList = new List<Student>();
                IList
    <Student> studentResultList = new List<Student>();
                studentResultList 
    = ResultMap.GetIList<Student, Student>(studentList);//从集合返回集合

                     6、实体TO 实体的映射

                Student student = new Student();
                Student studentResult 
    = new Student();
                studentResult 
    = ResultMap.Load<Student, Student>(student);//从实体返回实体

              水文结束! 

  • 相关阅读:
    top指令
    Trie
    最大公约数
    angular2 获取到的数据无法实时更新的问题
    npm install 的时候出现 write access 导致不能成功安装的问题
    angular 的 @Input、@Output 的一个用法
    windows 安装 apache 服务以及添加 php 解析
    php 性能优化之opcache
    intellij 插件结构(文件结构以及概念层面上的结构)
    jetBrains 插件开发第一课-- 在主菜单栏新增一个菜单
  • 原文地址:https://www.cnblogs.com/assion/p/2000004.html
Copyright © 2011-2022 走看看