.NET_Dapper-CRUD(基本)

Dapper是一款轻量级ORM工具(Github)。如果你在小的项目中,使用Entity Framework、NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀。你又觉得ORM省时省力,这时Dapper 将是你不二的选择。

为什么选择Dapper

  1. 轻量。只有一个文件(SqlMapper.cs),编译完成之后只有120k(好象是变胖了)
  2. 速度快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。
  3. 支持多种数据库。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server
  4. 可以映射一对一,一对多,多对多等多种关系。
  5. 性能高。通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能不错。
  6. 支持FrameWork2.0,3.0,3.5,4.0,4.5

Dapper的安装

方法一:使用NuGet安装
打开visual studio的项目,依次点击工具NuGet包管理器管理解决方案的NuGet程序包; 

再点击浏览搜索dapper点击搜索结果中的Dapper勾选项目选择安装

解决方案管理器中点击项目查看引用,如果有Dapper,说明安装成功。 

方法二:直接在官网[2]下载源代码,加入项目。这种方法哈希君没有试,不过可以参考链接Dapper快速学习

实体字段必须与表的列名称一样 不然绑定不上数据根据表列名与实体字段名 自动装配的
在这里插入图片描述

Dapper的基本用法

插入操作

将一个对象person插入数据库的方法如图。 

插入代码文本如下。@Name的意思是自动将person里的Name值绑定上去。

/// <summary>
        /// 批量插入
        /// </summary>
        /// <param name="students">批量学生集合</param>
        /// <returns>受影响的行数</returns>
        public static int InsertEntities(List<Student> students)
        {
    
    
            using (IDbConnection conn = new SqlConnection(connectionString))
            {
    
    
                return conn.Execute("insert into studentInfo values(@stuid,@stuname,@stusex,@stuage,@stutel,@studorm)", students);
            }
        }

删除操作

    #region 删除
        /// <summary>
        /// 删除实体
        /// </summary>
        /// <param name="student">要删除的实体</param>
        /// <returns>受影响的行数</returns>
        public static int DeleteEntity(Student student)
        {
    
    
            using (IDbConnection conn = new SqlConnection(connectionString))//获取连接实例(对象)
            {
    
    
                return conn.Execute("delete studentInfo where stuID=@stuid", student);
            }
        }
        /// <summary>
        /// 批量删除
        /// </summary>
        /// <param name="students">要删除实体集合</param>
        /// <returns>受影响的行数</returns>
        public static int DeleteEntities(List<Student> students)
        {
    
    
            using (IDbConnection conn = new SqlConnection(connectionString))
            {
    
    
                return conn.Execute("delete studentInfo where stuID=@stuid", students);//根据传入类型循环删除
            }
        }
        #endregion

修改操作

   #region 更新(年龄)
        public static int UpdateEntity(Student student)
        {
    
    
            using (IDbConnection connection = new SqlConnection(connectionString))
            {
    
    
                return connection.Execute("update studentInfo set stuAge=@stuage where stuID=@stuid", student);
            }
        }

        public static int UpdateEntities(List<Student> students)
        {
    
    
            using (IDbConnection connection = new SqlConnection(connectionString))
            {
    
    
                return connection.Execute("update studentInfo set stuAge=@stuage where stuID=@stuid", students);
            }
        }
        #endregion

查询操作

    #region 查询
        /// <summary>
        /// 无参查询所有数据
        /// </summary>
        /// <returns></returns>
        public static List<Student> QueryEntitiesList()
        {
    
    
            using (IDbConnection connection = new SqlConnection(connectionString))
            {
    
    
                return connection.Query<Student>("select * from studentInfo").ToList();//List<Student>
            }
        }
        /// <summary>
        /// 查询指定数据
        /// </summary>
        /// <param name="person"></param>
        /// <returns></returns>
        public static Student QueryEntity(Student student)
        {
    
    
            using (IDbConnection connection = new SqlConnection(connectionString))
            {
    
    
                //Query<Student>("") --->IEnumerable<Student>     .SingleOrDefault() --->返回一个序列或默认值的唯一元素----->返回Student实体
                return connection.Query<Student>("select * from studentInfo where stuID=@stuid", student).SingleOrDefault();
            }
        }
        #endregion

Dapper的复杂操作

查询的In操作

   #region In操作
        /// <summary>
        /// In多查询
        /// </summary>
        /// <returns></returns>
        public static List<Student> QueryIn()
        {
    
    
            using (IDbConnection connection = new SqlConnection(connectionString))
            {
    
    
                var sql = "select * from studentInfo where stuID in @ids";
                //参数类型是Array的时候,dappper会自动将其转化
                return connection.Query<Student>(sql, new {
    
     ids = new int[2] {
    
     1, 2 } }).ToList();
            }
        }
        /// <summary>
        /// 根据多ID查询
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public static List<Student> QueryIn(int[] ids)
        {
    
    
            using (IDbConnection connection = new SqlConnection(connectionString))
            {
    
    
                var sql = "select * from studentInfo where stuID in @ids";
                //参数类型是Array的时候,dappper会自动将其转化
                return connection.Query<Student>(sql,new {
    
     ids=ids }).ToList();
            }
        }
        #endregion

多语句操作

   #region 多语句操作
        /// <summary>
        /// 多语句操作
        /// </summary>
        public static void QueryMultiple()
        {
    
    
            using (IDbConnection connection = new SqlConnection(connectionString))
            {
    
    
                var sql = "select * from Person; select * from Book";
                var multiReader = connection.QueryMultiple(sql);
                var personList = multiReader.Read<Student>();
                var bookList = multiReader.Read<ScoreInfo>();
                multiReader.Dispose();
            }
        }
        #endregion

Join操作

我们是面向对象编程,所以一个对象里面会有许多其他子对象,这个子对象里面又有其自己的子对象,这种关系在数据库里的表示就是外键。
比如我们有一本书book,它有主人person,book是一个对象,主人又是一个对象。

    #region Join操作
        /// <summary>
        /// Join链接查询学生成绩信息
        /// </summary> 
        /// <returns></returns>
        public static List<Student_ScoreTab> QueryJoinStudentsScores()
        {
    
    
            using (IDbConnection connection = new SqlConnection(connectionString))
            {
    
    
                var sql = " select a.stuID,a.stuName,a.stuSex,b.stuClass,b.html,b.c,b.sql " +
                    "from studentInfo a inner join scoreInfo b on a.stuID=b.stuID ";
                var result = connection.Query<Student_ScoreTab>(sql).ToList();

                return result;
            }
        }
        /// <summary>
        /// 根据学生学号 查询成绩
        /// </summary>
        /// <param name="stuno">要查询的学号</param>
        /// <returns></returns>
        public static List<Student_ScoreTab> QueryJoinStudentsScores(string stuno)
        {
    
    
            using (IDbConnection connection = new SqlConnection(connectionString))
            {
    
    
                var sql = " select a.stuID,a.stuName,a.stuSex,b.stuClass,b.html,b.c,b.sql " +
                    "from studentInfo a inner join scoreInfo b on a.stuID=b.stuID where a.stuId=@stuid";
                var result = connection.Query<Student_ScoreTab>(sql,new {
    
     stuid=stuno }).ToList();//new { stuid=stuno } 给@stuid参数赋值,名称一致自动装配

                return result;
            }
        }
        #endregion

在这里插入图片描述

End_2020/05/11

猜你喜欢

转载自blog.csdn.net/MrLsss/article/details/106052296