sql-builder/README.md

99 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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中必须有不多于三个的元素。
3. 可以使用InsertConditions等以Insert开头的方法此时占位符应使用@c1@c2等以数字结尾的字符。
示例:
```
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())
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")
page.Data = &data
err := sql_builder.PaginateBySql(page.Data, &page)
fmt.Println(err, data)
```