在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Dapper是一款轻量级ORM工具(Github)。如果你在小的项目中,使用Entity Framework、NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀。你又觉得ORM省时省力,这时Dapper 将是你不二的选择。 为什么选择Dapper
Dapper的安装方法一:使用NuGet安装 再点击 在
方法二:直接在官网Dapper快速学习
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); } } 批量插入: /// <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(); } } Dapper的复杂操作查询的In操作/// <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类,同样在数据库里设置这个表。 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(); } } Join操作我们是面向对象编程,所以一个对象里面会有许多其他子对象,这个子对象里面又有其自己的子对象,这种关系在数据库里的表示就是外键。 public class BookWithPerson { public int ID { get; set; } public Person Pers { get; set; } public string BookName { get; set; } } 我们自然想要一个方法把数据库里复杂的外键关系转成我们需要的对象BookWithPerson,所有我们需要的信息都存在里面,取数据的时候只要找这个对象取数据就行了,比如我们需要一本书的主人的姓名,我们只需要bookWithPerson.Pers.Name。如果是一对多的关系我们用数组,如果是多对多我们加一层mapping。
现在我们想根据书的ID查询书的信息,包括主人信息。那么 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; } } 中,Query的三个泛型参数分别是
委托回调类型1 ,委托回调类型2 ,返回类型 。形参的三个参数分别是sql语句 ,map委托 ,对象参数 。所以整句的意思是先根据sql语句查询;同时把查询的person信息赋值给bookWithPerson.Pers,并且返回bookWithPerson;book是对象参数,提供参数绑定的值。最终整个方法返回BookWithPerson,这样我们所需要的所有信息就有了。 摘自于:https://www.jianshu.com/p/c4ca2989d26a
|
请发表评论