sql-builder/README.md

98 lines
2.6 KiB
Markdown
Raw Normal View History

2024-04-29 15:59:38 +08:00
# sql-builder
基于git.botann.com/boomerang包中的tydb、tytaos封装的sql构建器
使用方法引入sql-builder包使用NewSqlBuilder()创建构建器入参为实现接口SqlConnector的对象。
SqlConnector接口定义如下
```
type SqlConnector[T tydb.QOneRowRst | tytaos.QOneRowRst | int] interface {
QueryEx(sql string, data interface{}, args ...interface{}) error
QueryRow(sql string, data interface{}, args ...interface{}) (error, T)
}
```
根据sql查询单条记录
```
sqlBuilder.FindOneBySql(&data)
入参data为结构体指针结构体字段和sql查询字段一一对应。
```
根据sql查询多条记录
```
sqlBuilder.FindBySql(&data)
入参data为结构体切片指针结构体字段和sql查询字段一一对应。
```
分页查询:
```
需要实现接口Page
type Page interface {
Init()
GetPageIndex() int
GetPageSize() int
GetTotal() int
SetPageIndex(int)
SetpageSize(int)
SetTotal(int)
}
sqlBuilder.PaginateBySql(&data,&page)
入参data为结构体切片指针结构体字段和sql查询字段一一对应。page为实现了Page接口的结构体指针
```
注意:
1. sql-builder可以对sql进行占位符处理@c表示条件@o表示排序@g表示分组@s表示查询字段分别对应sqlbuilder.Opts中的Conditions、Orders、Groups、Selects字段。
2. 占位符相比对应字段内的元素只能多不能少否则会报错。例如在sql中有三个@c占位符则Opts.Conditions中必须有不多于三个的元素。
示例:
```
type Page struct {
Total int `json:"total" form:"total"`
PageIndex int `json:"pageIndex" form:"pageIndex"`
PageSize int `json:"pageSize" form:"pageSize"`
Data interface{} `json:"data" form:"data"`
}
func (p *Page) Init() {
if p.PageIndex == 0 {
p.SetPageIndex(1)
}
if p.PageSize == 0 {
p.SetpageSize(10)
}
}
func (p *Page) GetPageIndex() int {
return p.PageIndex
}
func (p *Page) GetPageSize() int {
return p.PageSize
}
func (p *Page) GetTotal() int {
return p.Total
}
func (p *Page) SetTotal(total int) {
p.Total = total
}
func (p *Page) SetPageIndex(pageIndex int) {
p.PageIndex = pageIndex
}
func (p *Page) SetpageSize(pageSize int) {
p.PageSize = pageSize
}
var data []struct {
Autoseq int
Name string
}
var page Page
sql_builder := NewSqlBuilder(tydb.DB())
2024-05-07 17:19:55 +08:00
ids := []int{1, 2, 3, 4, 5}
sql_builder.Sql = `select autoseq,name from tsysuser where del = 0 @c order by @o`
sql_builder.Conditions("autoseq in (?)", ids)
sql_builder.Orders("autoseq desc")
2024-04-29 15:59:38 +08:00
page.Data = &data
err := sql_builder.PaginateBySql(page.Data, &page)
fmt.Println(err, data)
2024-05-07 17:19:55 +08:00
```