zoukankan      html  css  js  c++  java
  • Dapper学习总结

    看了《Dapper从入门到精通》后的总结

    (1)Dapper 是直接扩展 IDBConnection,而且是单独一个文件,可以直接嵌入到项目中使用。

    (2)通过手写sql语句,调用execute方法添加数据,返回的是影响的行数;通过实体,调用insert方法添加数据,返回的是主键值。

    (3)在IDBconnection中使用事务,主要注意在执行 Insert 方法时传入Transaction,用try...catch捕获异常,并在catch块调用Rollback(否则的话会出现部分提交的情况)。

    例:

    public bool InsertWithTran()
            {
                using (var conn = Connection)
                {
                   int _departmentid = 0, _employeeid = 0,_rnum=0;
                    var _departmentname = new t_department { departmentname = "应用开发部ENTITY", introduce = "应用开发部主要开始公司的应用平台" };
                    var _employee = new t_employee {displayname = "Micro",email ="1441299@qq.com",loginname ="Micro",password = "66778899",mobile = "123456789"};
                    conn.Open();
                    var _tran=conn.BeginTransaction();
                    try
                    {
                        _departmentid=conn.Insert(_departmentname, transaction: _tran).Value;
                        ++_rnum;
                        _employeeid = conn.Insert(_employee, transaction: _tran).Value;
                        ++_rnum;
                        conn.Insert(new t_derelation { departmentid = _departmentid, employeeid = _employeeid }, transaction: _tran);
                        ++_rnum;
                        _tran.Commit();
                    }
                    catch
                    {
                        _rnum = 0;
                        _tran.Rollback();
                    }
                    return _rnum > 0;
                }
            }
    View Code

    (4)调用存储过程,要通过DynamicParameters这个类传递参数,再把命令类型赋值为StoredProcedure,然后通过Query调用存储过程。

    例:

            public Tuple<string,string> ProceDemo()
            {
                int employeeid = 1;
                var _mobile = "";
                var _dy = new DynamicParameters();
                _dy.Add("employeeid", employeeid);
                _dy.Add("displayname", string.Empty, dbType: DbType.String, direction: ParameterDirection.Output);
                using (var _conn = Connection)
                {
                    _conn.Open();
                    _mobile= _conn.Query<string>("p_Procedemo", _dy, commandType: CommandType.StoredProcedure).FirstOrDefault();
                }
                return Tuple.Create(_mobile, _dy.Get<string>("displayname"));
            }
    View Code

    (5)基于SQL查询:使用Query<T>泛型方法;实体直接查询:使用GetList<T>泛型方法。

    (6)多表查询,使用QueryMultiple(),可以返回查询中每条sql语句的数据集合。

    例:

            public void GetMultiEntity()
            {
                string _sql = "SELECT * FROM t_department AS a;SELECT * FROM t_employee AS a";
                using (var _conn = Connection)
                {
                    var _grid = _conn.QueryMultiple(_sql);
                    var _department = _grid.Read<t_department>();
                    var _employee = _grid.Read<t_employee>();
                }
            }
    View Code

    (7)Dapper的实体映射:

    a. 属性不编辑,用[Editable(false)]这个特性标记

    b. 类名到表名的映射,用[Table("tablename")]特性

    c. 主键映射,如果有Id属性,默认为主键,否则要添加[Key]特性

  • 相关阅读:
    页面调用百度地图但是使用了https证书之后不显示
    JAVA查询类别(菜单)下的所有子类别(递归)
    summernote富文本的简单使用
    thymeleaf标签在js中调用转义变量与不转义变量写法
    SpringBoot使用@Async实现异步调用
    JAVA使用多线程进行数据处理
    MapReduce-TextInputFormat 切片机制
    BootstrapTable 导出数据
    BootstrapTable 加载数据
    CDN 常用静态资源公共库
  • 原文地址:https://www.cnblogs.com/zhengwk/p/5287781.html
Copyright © 2011-2022 走看看