为什么需要SQLBuilder?
- 写一句很长的sql容易出错,且出错后不好定位。
- 函数式编程可以直接定位到是哪个函数的问题。
- 函数式编程比一长串sql更容易编写和理解。
Builder接口
type Builder interface {
toString() string
getPrev() Builder
ToString() string
}
//后面每个Builder都是这么实现接口的
func(self *xxxBuilder) toString()string{
return self.sb.String()
}
func (self *xxxBuilder) getPrev() Builder{
return self.prev
}
func (self *xxxBuilder) ToString() string{
var root = Builder
root = self
for root.getPrev() != nil{
root = root.getPrev()
}
return root.toString()
}
各类型Builder:相当于层层嵌套
1.LimitBuilder:实现limit功能
type LimitBuilder struct {
sb strings.Builder
prev Builder
}
- 构造函数
func newLimitBuilder(offset, n int) *LimitBuilder {
builder := &LimitBuilder{}
//通过strings.Builder实现高效的字