开源:water/goweb
func (self *PagedbRequest) CreateDbTableStru(meta *metadata.MetadataTable) reflect.Value { var metaColService = service.NewMetadataFactroy() dbFields := []reflect.StructField{} for _, col := range meta.Columns { var colType = metaColService.FindGoType(col.DataType) var ColTyp8 = reflect.TypeOf(int8(0)) var ct = func(colType string) *reflect.Type { var ColTyp = reflect.TypeOf(int8(0)) switch colType { case "float32": ColTyp = reflect.TypeOf(float32(0)) case "float64": ColTyp = reflect.TypeOf(float64(0)) case "int64": ColTyp = reflect.TypeOf(int64(0)) case "int32": ColTyp = reflect.TypeOf(int32(0)) case "int16": ColTyp = reflect.TypeOf(int16(0)) case "string": ColTyp = reflect.TypeOf("") case "bool": ColTyp = reflect.TypeOf(true) case "byte": ColTyp = reflect.TypeOf(byte(0)) case "[]byte": ColTyp = reflect.TypeOf([]byte{}) case "time.Time": ColTyp = reflect.TypeOf(time.Now()) if col.ColumnName == "deleted_at" { var t *time.Time ColTyp = reflect.TypeOf(t) } } return &ColTyp }(colType) if ColTyp8 != *ct { var colField = reflect.StructField{ Name: stringutils.Case2Camel(col.ColumnName), Type: *ct, Tag: reflect.StructTag(fmt.Sprintf("json:\"%s\"", col.ColumnName)), } if self.IfExistField(col.ColumnName) { dbFields = append(dbFields, colField) } } } dbtableType := reflect.StructOf(dbFields) dbentity := reflect.New(dbtableType).Elem() return dbentity } 使用
func (self *PagedbRequest) GeneralTakeTable() *page.PageResult { var metadataFactroy = service.NewMetadataFactroy() var metadata = metadataFactroy.FindMetadata(self.TableName) if !metadata.TableExist { return page.ResultFailedPageResultErr(errors.New("table not exist")) } var dbentity = self.CreateDbTableStru(metadata) return self.PageRequest.TakeTable(self.TableName, dbentity.Addr().Interface()) }
func (self *PagedbRequest) GeneralScanTable() *page.PageResult { var metadata = self.metadataFactroy.FindMetadata(self.TableName) if !metadata.TableExist { return page.ResultFailedPageResultErr(errors.New("table not exist")) } var dbentity = self.CreateDbTableStru(metadata) var records, err = self.ScanTable(dbentity.Addr().Interface()) if err != nil { return page.ResultFailedPageResultErr(err) } var result = page.DefaultResult() result.PageCurrent = self.PageCurrent result.PageSize = self.PageSize result.Total, _ = self.CountTable(self.TableName) result.Data = records return result }
测试用例
func Test013_GeneralScanTable(t *testing.T) { var dbRequest = Default().SetPageSize(3) dbRequest.TableName = "service_api_list" dbRequest.FieldsName = "id,name,deleted_at" //dbRequest.SetQueryAll(true) var result = dbRequest.GeneralScanTable() golog.Info(result) }
结果
.com/leijmdas/gobase/goconfig/common/golog.Info() {
"code": 200,
"msg": "成功",
"page_size": 3,
"current": 1,
"total": 6,
"data": [
{
"deleted_at": null,
"name": "",
"id": 2
},
{
"id": 3,
"deleted_at": null,
"name": ""
},
{
"deleted_at": null,
"name": "",
"id": 4
}
],
"data_agg": null,
"data_highlight": null,
"hosturl": ""
}