使用Dapper操作Mysql数据库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Dapper操作Mysql数据库相关的知识,希望对你有一定的参考价值。

       首先我想说明一下:相比最原始的ADO.NET,一般都认为封装过一层的ORM性能上会有损耗,但其实在使用中你会发现,当你需要把数据库对象转化为实体模型时,很多所谓的DbHelper其实封装的很低效,反而是成熟的orm框架性能非常高;

       在操作之前先在nuget里获取dapper和mysql.data的程序包:

       插入数据:

        /// <summary>
        /// 增加一条数据
        /// </summary>
        public bool Add(User model)
        {
            int cnt = 0;
            string sQuery = "INSERT INTO user (Id,Login_Name,User_Pwd,User_Name,Phone_Num,Head_Portrait,Enabled,Create_Time,Update_Time)"
                              + " VALUES(@Id,@Login_Name,@User_Pwd,@User_Name,@Phone_Num,@Head_Portrait,@Enabled,@Create_Time,@Update_Time)";
            using (var connection = new MySqlConnection(connstr))
            {

                cnt = connection.Execute(sQuery, model);
            }

            if (cnt > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

         删除数据

      /// <summary>
        /// 根据ID删除一条数据
        /// </summary>
        public bool Delete(int id)
        {
            int cnt = 0;
            string sQuery = "Delete FROM user " + "WHERE [email protected]";
            using (var connection = new MySqlConnection(connstr))
            {
                cnt = connection.Execute(sQuery, new { Id = id });
            }
            if (cnt > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

         修改数据

        /// <summary>
        /// 更新一条数据
        /// </summary>
        public bool Update(User model)
        {
            string sQuery = "UPDATE user SET [email protected]_Name,[email protected]_Pwd,[email protected]_Name,[email protected]_Num,[email protected]_Portrait,[email protected],[email protected]_Time,[email protected]_Time"
                 + " WHERE [email protected]";
            int cnt = 0;
            using (var connection = new MySqlConnection(connstr))
            {

                cnt = connection.Execute(sQuery, model);
            }
            if (cnt > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

 

         查询数据

        /// <summary>
        /// 根据ID获取实体对象
        /// </summary>
        public User GetModel(int id)
        {
            string sQuery = "SELECT Id,Login_Name,User_Pwd,User_Name,Phone_Num,Head_Portrait,Enabled,Create_Time,Update_Time FROM user " + "WHERE Id = @Id";

            using (var connection = new MySqlConnection(connstr))
            {
                return connection.Query<User>(sQuery, new { Id = id }).FirstOrDefault();
            }
        }

        调用分页存储过程

        /// <summary>
        /// 分页获取数据列表
        /// </summary>
        public IEnumerable<User> GetListByPage(int PageSize, int PageIndex, string strWhere, string orderStr, ref int rowsnum)
        {
            using (var connection = new MySqlConnection(connstr))
            {
                var param = new DynamicParameters();
                param.Add("@p_table_name", "user");
                param.Add("@p_fields", "Id,Login_Name,User_Pwd,User_Name,Phone_Num,Head_Portrait,Enabled,Create_Time,Update_Time");
                param.Add("@p_page_size", PageSize);
                param.Add("@p_page_now", PageIndex);
                param.Add("@p_where_string", strWhere);
                param.Add("@p_order_string", orderStr);
                param.Add("@p_out_rows", 0, DbType.Int32, ParameterDirection.Output);
                IEnumerable<User> infoList = connection.Query<User>("pr_pager", param, null, true, null, CommandType.StoredProcedure);
                rowsnum = param.Get<int>("@p_out_rows");
                return infoList;
            }

 

 在不进行任何代码特殊优化的测试中,同过Emit反射IDataReader的序列队列,来快速的得到和产生对象的dapper性能是很不错的。

 

以上是关于使用Dapper操作Mysql数据库的主要内容,如果未能解决你的问题,请参考以下文章

.net4.0使用Dapper操作MySql

Asp.net Core 系列之--2.ORM初探:Dapper实现MySql数据库各类操作

Dapper操作Sql Server和MySql数据库

C#操作MySql数据库帮助类(Dapper,T-Sql)

asp.net core 使用Mysql和Dapper

使用列表参数批量插入/更新调用到 Dapper 中对数据库的单个操作/请求