c#调用数据库之Dapper

这里记录一下Dapper的使用方式,这个库有点像java的mybatis可以很方便的把查询出来的数据映射到对象上面去。

  1. 安装

    1. 通过 NetGet 就可以安装了,vs自带的一个包管理工具

  2. 初始化
    1. 通过
1
2
3
4
5
6
7
8
public IDbConnection GetConnection()
{
// CONN_STR 这个是链接字符串,比如 postgresql 的链接字符串是
// private static string CONN_STR = "PORT=5432;DATABASE=test;HOST=localhost;PASSWORD=123456;USER ID=postgres";
var connection = new NpgsqlConnection(CONN_STR);
connection.Open();
return connection;
}
  1. 使用
    1. 查询一个
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
internal class SqlHelper
{
private static string CONN_STR = "PORT=5432;DATABASE=test;HOST=localhost;PASSWORD=123456;USER ID=postgres";


public IDbConnection GetConnection()
{

var connection = new NpgsqlConnection(CONN_STR);

connection.Open();


return connection;
}

public List<T> All<T>(string sql)
{
var con = GetConnection();
var list = con.Query<T>(sql).ToList();
con.Close();
return list;
}

internal List<T> All<T>(string sql, object p)
{
var con = GetConnection();
var list = con.Query<T>(sql, p).ToList();
con.Close();
return list;
}

internal T First<T>(string sql, object p)
{
var con = GetConnection();
var first = con.QuerySingle<T>(sql, p);
con.Close();
return first;
}

public int Add(string sql, object obj)
{
var con = GetConnection();
var row = con.Execute(sql, obj);
con.Close();
return row;
}

public string AddAndGetId(string sql, object obj)
{
var con = GetConnection();
var row = con.Execute(sql, obj);
if (row != 1)
{
con.Close();
return "";
}
const string sql2 = "select last_insert_id()";
var re = con.Query<string>(sql2).ToArray();
con.Close();
return re[0];
}

internal int Update(string sql, object worker)
{
var con = GetConnection();
var row = con.Execute(sql, worker);
con.Close();
return row;
}

#region 单例模式

private static SqlHelper _instance;

private SqlHelper()
{
}

public static SqlHelper GetInstance()
{
return _instance ?? (_instance = new SqlHelper());
}

#endregion
}

也比较简单,调用的时候

SqlHelper.getInstance().First<Order>("select * from order where id = @Id", new {Id = "123456"})

其中 Order 是实体类,对应着数据库的字段。


以上是简单用法,下面的是复杂用法

1
2
3
4
5
6
7
var sql = "select * from user left join address where userId = @UserId";
var procedureList = con.Query<User, Address, User>(sql,
(user, address) =>
{
user.address = address;
return user;
}, new {UserId = "123456"}).ToList();

IDbConnection这是一个接口,里面有一个Query函数,这个函数接受多个泛型,至于多少个,与关联的表有关,比如 一个 用户User 有多个 地址Address ,那么第一个泛型就是用户,第二个泛型就是Address,第三个就是要返回的对象。然后再实现对象之间的关系。最后返回的对象就是一个填充过数据的对象了,非常好用。