评论

.NET轻量级ORM PetaPoco简介及使用示例代码

原标题:.NET轻量级ORM PetaPoco简介及使用示例代码

简介

PetaPoco是一个轻量级的ORM(对象关系映射)框架,用于在.NET平台上进行数据访问和持久化操作。它提供了简单、快速、灵活的方式来与数据库进行交互,支持多种数据库类型,包括SQL Server、MySQL、SQLite、Oracle等。本文主要介绍PetaPoco的特点及优势,以及相关示例代码。

1、PetaPoco的特点及优势

PetaPoco是一个功能强大且易于使用的ORM框架,适用于.NET开发人员在各种项目中进行高效的数据访问。它的简洁性、轻量级和高性能使得它成为.NET开发社区中备受欢迎的选择之一。

1)简单易用

PetaPoco的API设计简洁,学习和使用都很容易。它提供了一套简单而直观的方法来执行数据库查询、插入、更新和删除等操作。

2)轻量级

PetaPoco是一个轻量级的框架,不依赖于复杂的配置和大量的依赖项。它的核心库非常小巧,对系统资源的消耗也很低,适用于各种规模的项目。

3)高性能

PetaPoco执行数据库操作的速度非常快,与其他ORM框架相比具有较低的性能开销。它采用了轻量级的对象映射机制,避免了过多的ORM特性和复杂的查询生成器。

4)灵活性

PetaPoco提供了灵活的查询和映射选项,可以满足各种复杂的数据访问需求。开发人员可以自由地编写SQL查询语句,并通过简单的映射机制将查询结果映射到对象模型中。

5)跨数据库支持

PetaPoco支持多种主流数据库类型,包括SQL Server、MySQL、SQLite、Oracle等,使开发人员能够在不同的数据库平台上进行统一的数据访问操作。

代码地址:https://github.com/CollaboratingPlatypus/PetaPoco

2、安装引用PetaPoco

可以通过NuGet包管理器在Visual Studio中安装PetaPoco。打开项目,右键点击项目,选择“Manage NuGet Packages”,搜索PetaPoco并安装。

3、PetaPoco使用示例代码

//初始化数据库连接var db=new PetaPoco.Database("connectionStringName");

//查询单个值long count=db.ExecuteScalar<long>("SELECT Count(*) FROM ShelfMissionInfo");

//返回一条记录var a = db.SingleOrDefault<ShelfMissionInfo>("SELECT * FROM ShelfMissionInfo WHERE =@0", 1));

//返回一条记录,可以省略select,用where开头,会自动查询出全部字段(不是*号)var a=db.SingleOrDefault<ShelfMissionInfo>("WHERE id=@0", 123);

//返回一条记录,可以From开头,会自动查询出全部字段(不是*号)var a = db.SingleOrDefault<ShelfMissionInfo>("FROM whatever WHERE id=@0", 123);

//如果有主键,可以这样写var a = db.SingleOrDefault<ShelfMissionInfo>(some_id);

//分页,分页的代码会自动生成var result=db.Page<ShelfMissionInfo>(1, 20,"SELECT * FROM ShelfMissionInfo WHERE category=@0 ORDER BY date_posted DESC", "data");

var result = db.Page<ShelfMissionInfo>(pageNumber, pageSize, sql, args);var totalNumber = result.TotalItems;//所有数据条数var data = result.Items;//查询返回的数据// 逐行查询每条记录,一次只从数据库表中取一条数据foreach (var a in db.Query<ShelfMissionInfo>("SELECT * FROM ShelfMissionInfo")){Console.WriteLine("{0} - {1}", a.id, a.title);}

//动态查询,返回dynamic,这种方式不支持自动添加Selectforeach (var a in db.Fetch<dynamic>("SELECT * FROM ShelfMissionInfo")){Console.WriteLine("{0} - {1}", a.id, a.title);}//查询单个字段,返回非Poco对象,支持所有的Type.IsValueType,字符串和byte数组foreach (var x in db.Query<long>("SELECT id FROM ShelfMissionInfo")){Console.WriteLine("ShelfMissionInfo ID: {0}", x);}

//检查主键是否存在if (db.Exists<ShelfMissionInfo>(23)) db.Delete <ShelfMissionInfo>(23);

//执行Sql,不返回值db.Execute("DELETE FROM ShelfMissionInfo WHERE draft<>0");

//插入记录// Create the ShelfMissionInfovar a=new ShelfMissionInfo;a.title="My new ShelfMissionInfo";a.content="PetaPoco was here";a.CreateTime=DateTime.UtcNow;// Insert itdb.Insert(a);

//修改记录// Get a recordvar a=db.SingleOrDefault<ShelfMissionInfo>("SELECT * FROM ShelfMissionInfo WHERE id=@0", 123);// Change ita.content="PetaPoco was here again";// Save itdb.Update(a);

//修改一个属性更简洁的写法db.Update("ShelfMissionInfo", "id", new { ProductName="apple" }, 123);

//更新的另一种写法db.Update<ShelfMissionInfo>("SET title=@0 WHERE id=@1", "apple", 123);

//更新指定的字段a.Update(new string[] { "title" });//也可以这样更新db.Update<user>(u, new string[] { "title" });

//删除记录//通过主键删除db.Delete(a);

//自定义删除db.Delete<ShelfMissionInfo>("WHERE id=@0", 123);

//事务,而且事物可以嵌套哦using(var scope = db.GetTransaction){//todo: Do transacted updates here

// Commitscope.Complete;

}

//支持存储过程,还不支持out 参数?db.Query<type>("CALL storedproc") // MySQL stored procdb.Query<type>("EXECUTE myproc") // MySQL prepared statementdb.Query<type>("EXECUTE storedproc") // SQL Server

//执行SqldatabaseQuery.Execute("insert into temp1 (t) values (@0)", new SqlParameter { SqlDbType = SqlDbType.VarBinary, Value = DbNull.Value });

//组装Sqlvar id=123;var a=db.Query<ShelfMissionInfo>(PetaPoco.Sql.Builder.Append("SELECT * FROM ShelfMissionInfo").Append("WHERE id=@0", id).Append("AND CreateTime<@0", DateTime.UtcNow))

//动态组装Sqlvar id=123;var sql=PetaPoco.Sql.Builder.Append("SELECT * FROM ShelfMissionInfo").Append("WHERE id=@0", id);

if (start_date.HasValue)sql.Append("AND CreateTime>=@0", start_date.Value);

if (end_date.HasValue)sql.Append("AND CreateTime<=@0", end_date.Value);

var a=db.Query<ShelfMissionInfo>(sql)

//通过命名的参数来组装Sqlsql.Append("AND CreateTime>=@start AND CreateTime<=@end", new { start=DateTime.UtcNow.AddDays(-2), end=DateTime.UtcNow });

//组装Sql还可以这样var sql=PetaPoco.Sql.Builder.Select("*").From("ShelfMissionInfo").Where("CreateTime < @0", DateTime.UtcNow).OrderBy("CreateTime DESC");

//还可以更复杂var sql = Sql.Builder.Select("*").From("ShelfMissionInfo").LeftJoin("Products").On("ShelfMissionInfo.id=Products.id");

出处:cjavapy.com/article/3046/作者:levi

版权声明:本文来源于网友收集或网友供稿,仅供学习交流之用,如果有侵权,请转告小编或者留言,本公众号立即删除。

支持小薇

腾讯云福利

关注公众号 DotNet开发跳槽

点在看返回搜狐,查看更多

责任编辑:

平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()
大家都在看
推荐阅读