.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
    // Commit    scope.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");