Dapper是一款輕量級ORM工具(Github)。若是你在小的項目中,使用Entity Framework、NHibernate 來處理大數據訪問及關係映射,未免有點殺雞用牛刀。你又以爲ORM省時省力,這時Dapper 將是你不二的選擇。html
方法一:使用NuGet安裝
打開visual studio的項目,依次點擊工具
,NuGet包管理器
,管理解決方案的NuGet程序包
; git
再點擊瀏覽
,搜索dapper
,點擊搜索結果中的Dapper
,勾選項目
,選擇安裝
; github
在解決方案管理器中點擊項目
,查看引用
,若是有Dapper
,說明安裝成功。 sql
方法二:直接在官網[2]下載源代碼,加入項目。這種方法哈希君沒有試,不過能夠參考連接Dapper快速學習數據庫
將一個對象person插入數據庫的方法如圖。 編程
插入代碼文本以下。@Name的意思是自動將person裏的Name值綁定上去。數組
public static int Insert(Person person) { using (IDbConnection connection = new SqlConnection(connectionString)) { return connection.Execute("insert into Person(Name,Remark) values(@Name,@Remark)", person); } }
批量插入:oracle
/// <summary> /// 批量插入Person數據,返回影響行數 /// </summary> /// <param name="persons"></param> /// <returns>影響行數</returns> public static int Insert(List<Person> persons) { using (IDbConnection connection = new SqlConnection(connectionString)) { return connection.Execute("insert into Person(Name,Remark) values(@Name,@Remark)", persons); } }
public static int Delete(Person person) { using (IDbConnection connection = new SqlConnection(connectionString)) { return connection.Execute("delete from Person where id=@ID", person); } } public static int Delete(List<Person> persons) { using (IDbConnection connection = new SqlConnection(connectionString)) { return connection.Execute("delete from Person where id=@ID", persons); } }
public static int Update(Person person) { using (IDbConnection connection = new SqlConnection(connectionString)) { return connection.Execute("update Person set name=@name where id=@ID", person); } } public static int Update(List<Person> persons) { using (IDbConnection connection = new SqlConnection(connectionString)) { return connection.Execute("update Person set name=@name where id=@ID", persons); } }
/// <summary> /// 無參查詢全部數據 /// </summary> /// <returns></returns> public static List<Person> Query() { using (IDbConnection connection = new SqlConnection(connectionString)) { return connection.Query<Person>("select * from Person").ToList(); } } /// <summary> /// 查詢指定數據 /// </summary> /// <param name="person"></param> /// <returns></returns> public static Person Query(Person person) { using (IDbConnection connection = new SqlConnection(connectionString)) { return connection.Query<Person>("select * from Person where id=@ID",person).SingleOrDefault(); } }
/// <summary> /// In操做 /// </summary> public static List<Person> QueryIn() { using (IDbConnection connection = new SqlConnection(connectionString)) { var sql = "select * from Person where id in @ids"; //參數類型是Array的時候,dappper會自動將其轉化 return connection.Query<Person>(sql, new { ids = new int[2] { 1, 2 }, }).ToList(); } } public static List<Person> QueryIn(int[] ids) { using (IDbConnection connection = new SqlConnection(connectionString)) { var sql = "select * from Person where id in @ids"; //參數類型是Array的時候,dappper會自動將其轉化 return connection.Query<Person>(sql, new { ids }).ToList(); } }
爲此咱們引入如下Book類,一樣在數據庫裏設置這個表。app
public class Book { public int ID { get; set; } public int PersonID { get; set; } public string BookName { get; set; } }
/// <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<Person>(); var bookList = multiReader.Read<Book>(); multiReader.Dispose(); } }
咱們是面向對象編程,因此一個對象裏面會有許多其餘子對象,這個子對象裏面又有其本身的子對象,這種關係在數據庫裏的表示就是外鍵。
好比咱們有一本書book,它有主人person,book是一個對象,主人又是一個對象。ide
public class BookWithPerson { public int ID { get; set; } public Person Pers { get; set; } public string BookName { get; set; } }
public static BookWithPerson QueryJoin(Book book) { using (IDbConnection connection = new SqlConnection(connectionString)) { var sql = @"select b.id,b.bookName,p.id,p.name,p.remark from Person as p join Book as b on p.id = b.personId where b.id = @id;"; var result = connection.Query<BookWithPerson, Person, BookWithPerson>(sql, (bookWithPerson, person) => { bookWithPerson.Pers = person; return bookWithPerson; }, book); //splitOn: "bookName"); return (BookWithPerson)result; } }
委託回調類型1
,
委託回調類型2
,
返回類型
。形參的三個參數分別是
sql語句
,
map委託
,
對象參數
。因此整句的意思是先根據sql語句查詢;同時把查詢的person信息賦值給bookWithPerson.Pers,而且返回bookWithPerson;book是對象參數,提供參數綁定的值。