This commit is contained in:
邹宗楠
2022-08-25 16:10:01 +08:00
parent be87623211
commit 66db5867a4
49 changed files with 2364 additions and 649 deletions

View File

@@ -53,6 +53,97 @@ func Insert(db *sqlx.DB, obj interface{}) (err error) {
return err
}
func InsertTx(db *sqlx.Tx, obj interface{}) (err error) {
var (
value = reflect.ValueOf(obj)
stype = reflect.TypeOf(obj)
sql, values = strings.Builder{}, strings.Builder{}
sqlParams = []interface{}{}
direct reflect.Value
)
if stype.Kind() != reflect.Struct {
direct = reflect.Indirect(value)
stype = stype.Elem()
} else {
direct = value
}
sname := stype.Name()
sql.WriteString("INSERT INTO ")
for i := 0; i < stype.NumField(); i++ {
if stype.Field(i).Type.String() == "*time.Time" {
if direct.Field(i).Interface().(*time.Time) != nil {
values.WriteString(stype.Field(i).Tag.Get("json") + ",")
sqlParams = append(sqlParams, direct.Field(i).Interface())
}
} else {
if !direct.Field(i).IsZero() {
values.WriteString(stype.Field(i).Tag.Get("json") + ",")
sqlParams = append(sqlParams, direct.Field(i).Interface())
}
}
}
sql.WriteString(putils.UnMarshalHr(sname) + "(")
sql.WriteString(values.String()[:len(values.String())-1])
sql.WriteString(") VALUES(")
for i := 0; i < len(strings.Split(values.String(), ","))-1; i++ {
if i != 0 {
sql.WriteString(",")
}
sql.WriteString("?")
}
sql.WriteString(")")
_, err = db.Exec(sql.String(), sqlParams...)
return err
}
func UpdateTx(db *sqlx.Tx, obj interface{}, fields ...string) (err error) {
var (
value = reflect.ValueOf(obj)
stype = reflect.TypeOf(obj)
sql = strings.Builder{}
sqlParams = []interface{}{}
direct reflect.Value
fieldsMap = make(map[string]*struct{})
)
if stype.Kind() != reflect.Struct {
direct = reflect.Indirect(value)
stype = stype.Elem()
} else {
direct = value
}
sname := stype.Name()
sql.WriteString("UPDATE ")
sql.WriteString(putils.UnMarshalHr(sname) + " SET ")
fieldsStr := []string{}
for _, v := range fields {
fieldsStr = append(fieldsStr, v+"=?")
fieldsMap[v] = &struct{}{}
}
sql.WriteString(strings.Join(fieldsStr, ","))
sql.WriteString(" WHERE id = ?")
for i := 1; i < stype.NumField(); i++ {
if fieldsMap[stype.Field(i).Tag.Get("json")] != nil {
if stype.Field(i).Type.String() == "*time.Time" {
if direct.Field(i).Interface().(*time.Time) != nil {
sqlParams = append(sqlParams, direct.Field(i).Interface())
}
} else {
if !direct.Field(i).IsZero() {
sqlParams = append(sqlParams, direct.Field(i).Interface())
}
}
}
}
if direct.Field(0).Int() == 0 {
return err
} else {
sqlParams = append(sqlParams, direct.Field(0).Int())
}
_, err = db.Exec(sql.String(), sqlParams...)
return err
}
func Update(db *sqlx.DB, obj interface{}, fields ...string) (err error) {
var (
value = reflect.ValueOf(obj)