快速上手
一、从表开始
1. 自定义表
- 继承Table
- 通过DefineColumn定义列
- 建议定义为单例或用IOC管理
public class CommentTable : Table
{
public CommentTable(string tableName = "Comments")
: base(tableName)
{
Id = DefineColumn(nameof(Id));
UserId = DefineColumn(nameof(UserId));
PostId = DefineColumn(nameof(PostId));
Content = DefineColumn(nameof(Content));
Pick = DefineColumn(nameof(Pick));
}
public readonly IColumn Id;
public readonly IColumn UserId;
public readonly IColumn PostId;
public readonly IColumn Content;
public readonly IColumn Pick;
}
2. 自定义别名表
- 如果要联表,同步自定义别名表是有必要的
- 继承TableAlias
- 通过AddColumn定义前缀列
- 建议定义为单例或用IOC管理
public class CommentAliasTable : TableAlias<CommentTable>
{
public CommentAliasTable(string tableAlias)
: this(new CommentTable("Comments"), tableAlias){}
public CommentAliasTable(CommentTable table, string tableAlias)
: base(table, tableAlias)
{
Id = AddColumn(table.Id);
UserId = AddColumn(table.UserId);
PostId = AddColumn(table.PostId);
Content = AddColumn(table.Content);
Pick = AddColumn(table.Pick);
}
public readonly IPrefixField Id;
public readonly IPrefixField UserId;
public readonly IPrefixField PostId;
public readonly IPrefixField Content;
public readonly IPrefixField Pick;
}
3. 用DB管理表
var table = _db.From("Users")
二、查询表
1. 自定义表查询
var table = new UserTable();
var query = table.ToSqlQuery()
.Where(table.Id.EqualValue(100));
// SELECT * FROM [Users] WHERE [Id]=100
2. 其他表查询
var query =_db.From("Users")
.ToSqlQuery()
.FieldEqualValue("Id", 100);
// SELECT * FROM [Users] WHERE [Id]=100
var query =_db.From("Users")
.ToSqlQuery()
.Where("Id=100");
// SELECT * FROM [Users] WHERE Id=100
三、联表查询
1. 自定义别名表联表
CommentAliasTable c = new("c");
PostAliasTable p = new("p");
var query = c.SqlJoin(p)
.On(c.PostId, p.Id)
.Root
.Where(c.Pick.EqualValue(true))
.Where(p.Author.EqualValue("张三"));
// SELECT * FROM [Comments] AS c INNER JOIN [Posts] AS p ON c.[PostId]=p.[Id] WHERE c.[Pick]=1 AND p.[Author]='张三'
2. 其他表联表
var joinOn = _db.From("Comments")
.SqlJoin(_db.From("Posts"))
.OnColumn("PostId", "Id")
.WhereLeft("Pick", Pick => Pick.EqualValue(true))
.WhereRight("Author", Author => Author.NotEqualValue("张三"));
// SELECT * FROM [Comments] AS t1 INNER JOIN [Posts] AS t2 ON t1.[PostId]=t2.[Id] WHERE t1.[Pick]=1 AND t2.[Author]<>'张三'
四、分组查询
1. 可以直接对表分组
var groupBy = _db.From("Comments")
.SqlGroupBy("PostId")
.Having(g => g.Sum("Pick").GreaterValue(100));
// SELECT * FROM [Comments] GROUP BY [PostId] HAVING SUM([Pick])>100
var table = new CommentTable();
var groupBy = table.SqlGroupBy(table.PostId)
.Having(table.Pick.Sum().GreaterValue(100));
// SELECT * FROM [Comments] GROUP BY [PostId] HAVING SUM([Pick])>100
2. 对表查询分组
- 调用路径:ToSqlQuery().SqlGroupBy()
- 表查询
- 分组查询
var groupBy = _db.From("Comments")
.ToSqlQuery()
.FieldGreaterEqualValue("Pick", 10)
.SqlGroupBy("PostId")
.Having(g => g.Sum("Pick").GreaterValue(100));
// SELECT * FROM [Comments] WHERE [Pick]>=10 GROUP BY [PostId] HAVING SUM([Pick])>100
var table = new CommentTable();
var groupBy = table.ToSqlQuery()
.Where(table.Pick.GreaterEqualValue(10))
.SqlGroupBy(table.PostId)
.Having(table.Pick.Sum().GreaterValue(100));
// SELECT * FROM [Comments] WHERE [Pick]>=10 GROUP BY [PostId] HAVING SUM([Pick])>100
五、插入
1. 按列插入
var name = Column.Use("Name");
var score = Column.Use("Score");
var insert = new SingleInsert("Students")
.InsertColumns(name, score);
// INSERT INTO [Students]([Name],[Score])VALUES(@Name,@Score)
2. 插入所有字段
var table = new Table("Users")
.DefineColums("Id","Name", "Age")
.IgnoreInsert("Id");
var insert = table.ToInsert()
.InsertSelfColumns();
// 预设Id是自增列,可查询不可插入
// INSERT INTO [Users]([Name],[Age])VALUES(@Name,@Age)
六、删除
var table = new StudentTable();
var delete = table.ToSqlQuery()
.Where(table.Score.LessValue(60))
.ToDelete();
// DELETE FROM [Students] WHERE [Score]<60
七、更新
1. 按列更新
var table = new StudentTable();
var update = table.ToSqlQuery()
.Where(table.Score.LessValue(60))
.ToUpdate()
.Set(table => table.Score.AddValue(10));
// UPDATE [Students] SET [Score]+=10 WHERE [Score]<60
2. 更新所有字段
var id = Column.Use("Id");
var name = Column.Use("Name");
var age = Column.Use("Age");
var table = new Table("Users")
.AddColums(id, name, age)
.IgnoreUpdate(id);
var update = table.ToUpdate(id.Equal())
.SetSelfFields();
// 预设Id是主键不更新
// UPDATE [Users] SET [Name]=@Name,[Age]=@Age WHERE [Id]=@Id
八、获取数据
1. 直接获取全表
UserTable table = new();
var select = table.ToSelect()
.Select(table.Id, table.Name);
// SELECT [Id],[Name] FROM [Users]
2. 从表查询获取
- 调用路径:ToSqlQuery().ToSelect()
var table = new UserTable();
var select = table.ToSqlQuery()
.Where(table.Status.EqualValue(true))
.ToSelect()
.Select(table.Id, table.Name);;
// SELECT [Id],[Name] FROM [Users]
3. 分页获取
- 调用路径:ToSqlQuery().ToCursor().ToSelect()
var table = new UserTable();
var select = table.ToSqlQuery()
.Where(table.Status.EqualValue(true))
.ToCursor(10, 20)
.Asc(table.Id)
.ToSelect()
.Select(table.Id, table.Name);
// SELECT [Id],[Name] FROM [Users] WHERE [Status]=1 ORDER BY [Id] OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY