yjp 1 år sedan
förälder
incheckning
5e1200a0ba
3 ändrade filer med 67 tillägg och 55 borttagningar
  1. 10 11
      db_operations/db_operations.go
  2. 30 38
      db_operations/operations.go
  3. 27 6
      demo/demo.go

+ 10 - 11
db_operations/db_operations.go

@@ -15,6 +15,8 @@ type BaseDBOperations interface {
 	// 会重置数据库连接的方法
 	NewSession() DBOperations
 	Table(name string, args ...any) DBOperations
+
+	// 执行SQL语句,使用Raw之后必须使用Rows或Row,否则不执行SQL
 	Raw(sql string, values ...any) DBOperations
 
 	// 组织SQL语句相关的方法
@@ -28,18 +30,15 @@ type BaseDBOperations interface {
 	Paging(pageNo int, pageSize int) DBOperations
 
 	// 写方法
-	Create(model interface{}) error
-	Delete(idModel interface{}) error
-	Updates(idModel interface{}, updateData map[string]any) error
-	UpdatesWithRowsAffected(idModel interface{}, updateData map[string]any) (int64, error)
-
-	// 使用Model的查询方法
-	Query(models interface{}, pageNo int, pageSize int) error
-	QueryOne(model interface{}) error
-
-	// 不使用Model的查询方法,需要结合Table或者Raw使用,如需分页,需要配合Paging
+	Create(tableRow map[string]any) error
+	CreateBatch(tableRows []map[string]any) error
+	Delete() error
+	Updates(updateData map[string]any) error
+	UpdatesWithRowsAffected(updateData map[string]any) (int64, error)
+
+	// 查询方法
+	Rows(pageNo int, pageSize int) ([]map[string]any, error)
 	Row() (map[string]any, error)
-	Rows() ([]map[string]any, error)
 
 	// 其他方法
 	Count(count *int64) error

+ 30 - 38
db_operations/operations.go

@@ -2,7 +2,6 @@ package db_operations
 
 import (
 	"database/sql"
-	"errors"
 	"git.sxidc.com/service-supports/ds-sdk/db_operations/dberr"
 	"git.sxidc.com/service-supports/fslog"
 	"github.com/mitchellh/mapstructure"
@@ -143,7 +142,7 @@ func (op *Operations) Table(name string, args ...any) DBOperations {
 }
 
 func (op *Operations) Raw(sql string, values ...any) DBOperations {
-	op.processDB = op.initDB.Raw(sql, values...)
+	op.processDB = op.processDB.Raw(sql, values...)
 	return op
 }
 
@@ -199,8 +198,8 @@ func (op *Operations) Paging(pageNo int, pageSize int) DBOperations {
 	return op
 }
 
-func (op *Operations) Create(model interface{}) error {
-	err := op.processDB.Create(model).Error
+func (op *Operations) Create(tableRow map[string]any) error {
+	err := op.processDB.Create(tableRow).Error
 	if err != nil {
 		if strings.Contains(err.Error(), "SQLSTATE 23505") {
 			return dberr.ErrDBRecordHasExist
@@ -212,12 +211,25 @@ func (op *Operations) Create(model interface{}) error {
 	return nil
 }
 
-func (op *Operations) Delete(idModel interface{}) error {
-	return op.processDB.Delete(idModel).Error
+func (op *Operations) CreateBatch(tableRows []map[string]any) error {
+	err := op.processDB.Create(tableRows).Error
+	if err != nil {
+		if strings.Contains(err.Error(), "SQLSTATE 23505") {
+			return dberr.ErrDBRecordHasExist
+		}
+
+		return err
+	}
+
+	return nil
 }
 
-func (op *Operations) Updates(idModel interface{}, updateData map[string]any) error {
-	err := op.processDB.Model(idModel).Updates(updateData).Error
+func (op *Operations) Delete() error {
+	return op.processDB.Delete(make(map[string]any)).Error
+}
+
+func (op *Operations) Updates(updateData map[string]any) error {
+	err := op.processDB.Updates(updateData).Error
 	if err != nil {
 		if strings.Contains(err.Error(), "SQLSTATE 23505") {
 			return dberr.ErrDBRecordHasExist
@@ -229,8 +241,8 @@ func (op *Operations) Updates(idModel interface{}, updateData map[string]any) er
 	return nil
 }
 
-func (op *Operations) UpdatesWithRowsAffected(idModel interface{}, updateData map[string]any) (int64, error) {
-	op.processDB = op.processDB.Model(idModel).Updates(updateData)
+func (op *Operations) UpdatesWithRowsAffected(updateData map[string]any) (int64, error) {
+	op.processDB = op.processDB.Updates(updateData)
 	if op.processDB.Error != nil {
 		return 0, op.processDB.Error
 	}
@@ -238,33 +250,23 @@ func (op *Operations) UpdatesWithRowsAffected(idModel interface{}, updateData ma
 	return op.processDB.RowsAffected, nil
 }
 
-func (op *Operations) Query(models interface{}, pageNo int, pageSize int) error {
+func (op *Operations) Rows(pageNo int, pageSize int) ([]map[string]any, error) {
 	if pageNo != 0 && pageSize != 0 {
 		offset := (pageNo - 1) * pageSize
 		op.processDB = op.processDB.Offset(offset).Limit(pageSize)
 	}
 
-	err := op.processDB.Find(models).Error
-	if err != nil {
-		return err
-	}
-
-	op.processDB = op.processDB.Offset(-1).Limit(-1)
-
-	return nil
-}
+	defer func() {
+		op.processDB = op.processDB.Offset(-1).Limit(-1)
+	}()
 
-func (op *Operations) QueryOne(model interface{}) error {
-	err := op.processDB.First(model).Error
+	valueMaps := make([]map[string]any, 0)
+	err := op.processDB.Scan(&valueMaps).Error
 	if err != nil {
-		if errors.Is(err, gorm.ErrRecordNotFound) {
-			return dberr.ErrDBRecordNotExist
-		}
-
-		return err
+		return nil, err
 	}
 
-	return nil
+	return valueMaps, nil
 }
 
 func (op *Operations) Row() (map[string]any, error) {
@@ -281,16 +283,6 @@ func (op *Operations) Row() (map[string]any, error) {
 	return valueMap, nil
 }
 
-func (op *Operations) Rows() ([]map[string]any, error) {
-	valueMaps := make([]map[string]any, 0)
-	err := op.processDB.Scan(&valueMaps).Error
-	if err != nil {
-		return nil, err
-	}
-
-	return valueMaps, nil
-}
-
 func (op *Operations) Count(count *int64) error {
 	return op.processDB.Count(count).Error
 }

+ 27 - 6
demo/demo.go

@@ -83,16 +83,37 @@ func main() {
 		panic(err)
 	}
 
-	err = sdk.GetInstance().GetDBOperations().Table("test.classes").Create(map[string]any{
-		"id":          classID,
-		"name":        className,
-		"student_num": studentNum,
-	})
+	err = sdk.GetInstance().GetDBOperations().NewSession().
+		Table("test.classes").
+		Create(map[string]any{
+			"id":          classID,
+			"name":        className,
+			"student_num": studentNum,
+		})
+	if err != nil {
+		panic(err)
+	}
+
+	err = sdk.GetInstance().GetDBOperations().NewSession().
+		Table("test.classes").
+		Where("id = ?", classID).
+		Delete()
+	if err != nil {
+		panic(err)
+	}
+
+	err = sdk.GetInstance().GetDBOperations().NewSession().
+		Table("test.classes").
+		Create(map[string]any{
+			"id":          classID,
+			"name":        className,
+			"student_num": studentNum,
+		})
 	if err != nil {
 		panic(err)
 	}
 
-	tableRow, err := sdk.GetInstance().GetDBOperations().
+	tableRow, err := sdk.GetInstance().GetDBOperations().NewSession().
 		Table("test.classes").
 		Where("id = ?", classID).
 		Row()