开源软件名称:Loogn.OrmLite
开源软件地址:https://gitee.com/loogn/Loogn.OrmLite
开源软件介绍:
简要Loogn.OrmLite是一个超简单、超高效、超灵活的基于.net standard 2.0的数据访问组件! 特点- 支持sqlserver、mysql、sqlite3数据库;
- 通过扩展方法扩展 IDbConnection 和 IDbTransaction ;
- 支持数据库事务和批量插入
- 支持 dynamic 类型的模型(不定义模型也可使用此ORM)
- 超高的效率,超小的体积,比Dapper快,比Dapper小,Loogn.OrmLite.dll只有 85kb
Getting Strrarted一、 引入Loogn.OrmLite PM> Install-Package Loogn.OrmLite 二、引入名称空间 三、开始使用 using (var db = new SqlConnection("server=.;uid=sa;pwd=sa;database=test")) { var flag = db.Insert(new Person { Id = 23 }); if (flag > 0) { var person = db.SingleById<Person>(23); } } 一般可以把连接对象的创建封装起来: public static class DB { public static IDbConnection Open() { return new SqlConnection("server=.;uid=sa;pwd=sa;database=test"); } //public static IDbConnection OpenOther() //{ // return new SqlConnection("server=.;uid=sa;pwd=sa;database=other"); //} } 使用起来就更简单了: using (var db = DB.Open()) { // do something with db } 偷懒做法Orm中提供有AbstractDao,在具体项目中可以继承AbstractDao,提供一个连接字符串,做为dao层的基类 public class BaseDao<TEntity> : AbstractDao<TEntity> { protected override IDbConnection Open() { return new SqlConnection(ConnectionStringsSection.Instance.Db2); } // 这里可以提供项目中dao层的公共方法,不过AbstractDao已提供了很多,一般不需要 } dao类基本就不用写什么代码了 public class OrderDao:BaseDao<Order> { // 如果有需要,这里还是可以写dao层的东西的 } Model一个纯净的Model public class Person { public int Id { get; set; } public string Name { get; set; } public DateTime UpdateTime { get; set; } public DateTime AddTime { get; set; } } 一个带有Attribute的Model //指定表明 [OrmLiteTable("t_person")] public class Person { //整体修改时使用主键,如果自增可以使用InsertIgnore指定插入时忽略 [OrmLiteField(IsPrimaryKey = true, InsertIgnore = true)] public int Id { get; set; } public string Name { get; set; } public DateTime UpdateTime { get; set; } //整体修改时忽略 [OrmLiteField(UpdateIgnore = true)] public DateTime AddTime { get; set; } //整体修改,添加时忽略 [OrmLiteField(Ignore = true)] public List<string> SomeAttrs { get; set; } } 插入 var person = new Person { Name = "loogn" }; var flag = db.Insert(person); var person = new Person { Name = "loogn" }; var autoId = db.Insert(person,true); var flag = db.Insert("Person",new { Name="loogn" }); var autoId = db.Insert("Person",new { Name="loogn" },true); var flag = db.Insert("Person",DictBuilder.Assign("Name","loogn").Assign("Age",23)); var autoId = db.Insert("Person",DictBuilder.Assign("Name","loogn").Assign("Age",23),true); DictBuilder生成的是 Dictionary<string, object>的子类
var list = new List<Person>() { new Person{ Name="p1"}, new Person{ Name="p2"} }; var boolFlag = db.InsertAll(list); var list = new List<object>() { new { Name="p1"}, new { Name="p2"} }; var boolFlag = db.InsertAll("Person",list); 修改 var person = new Person { Id = 23, Name = "update name", Age = 28 }; var flag = db.Update(person); //or 指定修改列 var flag = db.Update(person,"Name","Age"); var fields = DictBuilder.Assign("name", "updateName").Assign("$age", "age+1"); var ps = DictBuilder.Assign("id", 23); var flag = db.Update<Person>(fields, "id=@id", ps); //or var flag = db.Update("person",fields, "id=@id", ps); fields中 $age列表示不参数化,直接使用后面的值,如上会生成 update person set name=@name,age=age+1 where id=23
var fields = DictBuilder.Assign("name", "updateName").Assign("$age", "age+1"); var flag = db.UpdateById<Person>(fields, 23); //or var flag = db.UpdateById("person", fields, 23); var fields = DictBuilder.Assign("name", "updateName").Assign("$age", "age+1"); var flag = db.UpdateById<Person>(fields,"loogn", "Name"); //or var flag = db.UpdateById("person", fields, "loogn", "Name"); var flag = db.UpdateFieldById<Person>("name","update name",1); //update person set name=@name where id=1; @name='update name' var flag = db.UpdateFieldById<Person>("name","update name",23,"age"); //update person set name=@name where age=23; @name='update name' var flag = db.UpdateAnonymous("person", new {Name="new name",Id=2}); //or var flag = db.UpdateAnonymous<Person>(new {Name="new name",Id=2}); //update person set Name=@name where Id=2 ; @name ="new name" var list = new List<Person>() { new Person{ Id=1, Name="new name1"}, new Person{ Id=2, Name="new name2"} }; var flag = db.UpdateAll(list); 查询 var person=db.SingleById<Person>(1); //or var person=db.SingleById<Person>(1,"_id"); var person=db.Single<Person>("age>10 and sex=1"); //select * from person where age>10 and sex=1 var person=db.Single<Person>("age>10 and Name=@name", DictBuilder.Assign("name", "abc")); //select * from person where age>10 and Name=@name; @name='abc' var person=db.Single<Person>("select ID,Name from Person where age>10 and sex=1"); //原始sql var person=db.Single<Person>("select ID,Name from Person where age>10 and name=@name", DictBuilder.Assign("name", "abc")); //原始sql带参数 var person=db.SingleFmt<Person>("select ID,Name from Person where age>{0} and sex={1}",10,1); var person= db.SingleWhere<Person>("id",23); var person= db.SingleWhere<Person>(DictBuilder.Assign("name","loogn").Assign("age",23)); var person= db.SingleWhere<Person>(new{ Name = "loogn", Age=23}); var list=db.Select<Person>(); var list=db.SelectByIds<Person>(new int[] { 1, 2, 3 }); //select * from person where id in (1,2,3); var list=db.SelectByIds<Person>(new string[] { "1", "2", "3" },"userId"); //select * from person where userId in ("1","2","3"); var list=db.SelectByIds<Person>(new string[] { "1", "2", "3" },"userId","id,name"); //select id,name from person where userId in ("1","2","3"); var cmds = new MutipleCmd[] { new MutipleCmd{ CmdText="select * from person"}, new MutipleCmd{ CmdText="select count(0) from person where id=@id",Params=DictBuilder.Assign("id",23)}, new MutipleCmd{ CmdText="select top 1 * from User where age>23"}, }; using (var fetcher = db.SelectMutipleResult(cmds)) { var personList = fetcher.FetchList<Person>(); //对应第一个命令 var personCount = fetcher.FetchScalar<int>(); //对应第二个命令 var user = fetcher.FetchObject<User>(); //对应第三个命令 } 其他Select和上面Single方法类似
var pageResult = db.SelectPage<Person>(new OrmLitePageFactor { Conditions = "id>2 and age=@age", Fields = "ID,Name", OrderBy = "ID desc", PageIndex = 1, PageSize = 10, Params = DictBuilder.Assign("age", 23) }); //也可以连接查询 var pageResult = db.SelectPage<Person>(new OrmLitePageFactor { Conditions = "p.id>2 and p.age=@age", Fields = "p.*,t.Name as TypeName", OrderBy = "p.ID desc", PageIndex = 1, PageSize = 10, Params = DictBuilder.Assign("age", 23), TableName="Person p inner join Type t on p.Typeid=t.id" }); 查询2 long count = db.Count<Person>(); // select count(0) from Person; long count = db.Count<Person>("id>@id", DictBuilder.Assign("id", 1)); long count = db.Count<Person>("id>@id", new { id=1}); // select count(0) from person where id=@id; @id=1 long count = db.CountWhere<Person>("age", 1); // select count(0) from Person where age=@age ; @age=1 long count = db.CountWhere<Person>(DictBuilder.Assign("age", 23).Assign("name", "loogn")); long count = db.CountWhere<Person>(new { age=23, name="loogn" }); // select count(0) from person where age=@age and name=@name; @age=23,@name="loogn"; long maxid= db.MaxID<long>("person"); // select max(id) from person string maxid= db.MaxID<string>("person","userid"); // select max(userid) from person int id= db.Scalar<int>("select id from Person where id=23") string name= db.Scalar<string>("select name from Person where age>@age",new { age=23}) List<string> nameList = db.Column<string>("select name from person where age>@age", DictBuilder.Assign("age", 23)); HashSet<string> nameSet = db.ColumnDistinct<string>("select distinct(name) from person"); Dictionary<int,string> typeDict = db.Dictionary<int,string>("select id,name from Type"); // id 和 name 一一对应的时候可以使用 Dictionary<int, List<string>> lookUp = db.Lookup<int, string>("select userid,tagName from userTag"); // 一个userid对应多个tagName 删除 var flag = db.DeleteById<Person>(2); // delete from person where id=2; var flag = db.DeleteById<Person>("123", "userId"); // delete from person where userid='123'; var flag = db.DeleteByIds<Person>(new int[] { 1, 2, 3 }); // delete from person where id in (1,2,3); var flag = db.DeleteByIds<Person>(new string[] { "111", "222", "333" }, "userId"); //delete from person where userId in ("111", "222", "333") var flag = db.DeleteWhere<Person>("name","loogn"); // delete from person where name=@name; @name="loogn" var flag = db.DeleteWhere<Person>(DictBuilder.Assign("age",23).Assign("name","loogn")); var flag = db.DeleteWhere<Person>(new { age=23, name="loogn"}); // delete from person where age=@age and name=@name; @age=23, @name="loogn"; var flag = db.Delete("delete from person where id=@id",DictBuilder.Assign("id",23)); var flag = db.Delete<Person>(); // delete from person; 其他 db.Proc("sp_name", DictBuilder.Assign("p1", 21).Assign("p2", "p2 value"),true); //直接执行 var cmd = db.Proc("sp_name", DictBuilder.Assign("p1", 21).Assign("p2", "p2 value")); //返回cmd,自己处理后续结果,如果有输出参数,可以在这里添加到cmd中 using (var reader = cmd.ExecuteReader()) { var list = TransformForDataReader.ReaderToObjectList<Person>(reader); //TransformForDataReader类中提供了许多从reader读取数据的方法 } using (var db = DB.Open())
|
请发表评论