国产精品ORM框架-SqlSugar详解 SqlSugar初识 专题一-CSDN博客
sqlsugar 官网-CSDN博客
4、进阶功能
5、集成整合
6、脚手架应用
4、进阶功能
4.1、生命周期
Queryable 什么时候操作库
Queryable是一个引用类型
Queryable拷贝机制
{
ISugarQueryable<Student> query = db.Queryable<Student>();
List<Student> studentList = query.ToList();
Student[] studentList1 = query.ToArray();
//ISugarQueryable 对象的内部,包含了如何生成Sql语句;--包含了生成Sql语句的规则
//包含了返回值;
//作用:在调用给你的时候,可以把查询的对象,表达式目录树。。。解析,组合成成Sql语句,但是并不会到数据库中去查询;
//如果在Tolist Toarray的时候,ISugarQueryable 马上执行,开始按照规则生成Sql语句,就马上去数据库中去执行;
//从queryable变成了List 这个时候类型发生变化 已经生成了SQL或者执行了数据库
}
{
Console.WriteLine("===============================");
var able = db.Queryable<Student>();
able.Where(it => it.Id > 0);
able.Where(it => it.Id > 0);
var list = able.ToList();
//where id>0 and tid>0
}
{
var query = db.Queryable<Student>().Where(it => it.Id == 1);
{
int count = query.Count();
List<Student> list = query.ToList();
Student[] array = query.ToArray();
string sqlString = query.ToSqlString();
}
//{
// int count = query.Clone().Count();//当query用于2个地方的时候一定要加Clone这点和EF有本质区别
// var list = query.Clone().ToList();
//}
}
4.2、执行Sql
方法列表
方法名 描述 返回值
SqlQuery< T > 查询所有返回实体集合 List
SqlQuery<T,T2> 可以返回2个结果集 Tuple<List, List>
SqlQuerySingle 查询第一条记录 T
SqlQueryDynamic 查查询所有返回匿名对象 dynamic
GetDataTable 查询所有 DataTable
GetDataReader 读取DR需要手动释放DR DataReader
GetDataSetAll 获取多个结果集 DataSet
ExecuteCommand 返回受影响行数,一般用于增删改 int
GetScalar 获取首行首列 object
GetString 获取首行首列 string
GetInt 获取首行首列 int
GetLong 获取首行首列 long
GetDouble 获取首行首列 Double
GetDecimal 获取首行首列 Decimal
GetDateTime 获取首行首列 DateTime
SqlQuery< T > 查询所有返回实体集合 List
SqlQuery<T,T2> 可以返回2个结果集 Tuple<List, List>
SqlQuerySingle 查询第一条记录 T
SqlQueryDynamic 查查询所有返回匿名对象 dynamic
GetDataTable 查询所有 DataTable
GetDataReader 读取DR需要手动释放DR DataReader
GetDataSetAll 获取多个结果集 DataSet
ExecuteCommand 返回受影响行数,一般用于增删改 int
GetScalar 获取首行首列 object
GetString 获取首行首列 string
GetInt 获取首行首列 int
GetLong 获取首行首列 long
GetDouble 获取首行首列 Double
GetDecimal 获取首行首列 Decimal
GetDateTime 获取首行首列 DateTime
#region 输出Sql语句+数据库表初始化
db.Aop.OnLogExecuting = (s, p) =>
{
Console.WriteLine("----------------------------");
Console.WriteLine($"Sql语句:{s}");
};
if (db.DbMaintenance.IsAnyTable("UinitBlukTable", false))
{
db.DbMaintenance.DropTable<UinitBlukTable>();
}
db.CodeFirst.InitTables<UinitBlukTable>();
#endregion
{
//上面列表中 SqlQuery 等方法都可以不一定是GetDataTable
{
var dt = db.Ado.GetDataTable("select * from UinitBlukTable");
}
//参数1:简化用法
{
string sql = "select * from UinitBlukTable where id=@id and name like @name";
var dt = db.Ado.GetDataTable(sql, new { id = 1, name = "%jack%" });
}
//参数2:复杂用法
{
string sql = "select * from UinitBlukTable where id=@id and name like @name";
var parameter = new List<SugarParameter>()
{
new SugarParameter("@id",1),
new SugarParameter("@name","%jack%") //执行sql语句
};
var dt = db.Ado.GetDataTable(sql, parameter);
}
{
//原生SQL用实体 sql 查询
//比db.SqlQueryable兼容性更强,支持复杂SQL存储过程,缺点没有自带的分页操作
List<UinitBlukTable> t1 = db.Ado.SqlQuery<UinitBlukTable>("select * from UinitBlukTable");
//原生SQL用匿名对象 sql 查询
List<dynamic> t2 = db.Ado.SqlQuery<dynamic>("select * from UinitBlukTable");
//插入 更新操作一般用
string sql = $"INSERT INT