golang中 使用gin 和 gorm 框架实现: 已知前端界面需要的json数据格式为 type Object3DJson struct { SceneID string `json:"sceneId" gorm:"primary_key"` Uuid string `json:"uuid" gorm:"index"` Type int `json:"type"` AdditionalData string `json:"additionalData"` Version string `json:"version"` } type ThreeSceneJson struct { SceneID string `json:"sceneId" gorm:"primary_key"` Type int `json:"type"` AdditionalData string `json:"additionalData"` Version string `json:"version"` } 使用gorm 映射的数据为: type Object3DDb struct { SceneID int64 `json:"sceneId" gorm:"primary_key"` Uuid int64 `json:"uuid" gorm:"index"` Type int `json:"type"` AdditionalData string `json:"additionalData"` Version int64 `json:"version"` } type ThreeSceneDb struct { SceneID int64 `json:"sceneId" gorm:"primary_key"` Type int `json:"type"` AdditionalData string `json:"additionalData"` Version int64 `json:"version"` } 如何以最高的效率实现转换和存储。且业务上当更新Object3DDb 数据Version自增1,对应的Object3DDb SceneID 的ThreeSceneDb对应的Version也自增1。 当增删Object3DDb 时,对应的Object3DDb SceneID 的ThreeSceneDb对应的Version也自增1。 要求实现 Object3DJson,ThreeSceneJson 的增上改查 共计8个接口,其中Object3DJson 要求查询条件为 SceneID,且要求分页查询,ThreeSceneJson无需查询条件,直接返回全部。
时间: 2023-07-19 22:46:19 浏览: 156
为了实现最高效的转换和存储,可以使用以下步骤:
1. 将前端传来的 Object3DJson 和 ThreeSceneJson 数据转换为 Object3DDb 和 ThreeSceneDb 数据。
2. 在增加 Object3DDb 数据时,同时增加对应的 ThreeSceneDb 数据。在删除 Object3DDb 数据时,同时删除对应的 ThreeSceneDb 数据。
3. 在更新 Object3DDb 数据时,如果 Version 字段发生变化,同时更新对应的 ThreeSceneDb 数据的 Version 字段。
4. 对于查询 Object3DJson 数据,可以使用 gorm 的分页查询功能,根据 SceneID 字段进行查询并返回分页结果。
5. 对于查询 ThreeSceneJson 数据,直接查询数据库并返回所有数据即可。
以下是代码示例:
```go
// Object3DJson 转 Object3DDb
func object3DJsonToObject3DDb(object3DJson *Object3DJson) *Object3DDb {
return &Object3DDb{
SceneID: strconv.Atoi(object3DJson.SceneID),
Uuid: strconv.Atoi(object3DJson.Uuid),
Type: object3DJson.Type,
AdditionalData: object3DJson.AdditionalData,
Version: strconv.Atoi(object3DJson.Version),
}
}
// ThreeSceneJson 转 ThreeSceneDb
func threeSceneJsonToThreeSceneDb(threeSceneJson *ThreeSceneJson) *ThreeSceneDb {
return &ThreeSceneDb{
SceneID: strconv.Atoi(threeSceneJson.SceneID),
Type: threeSceneJson.Type,
AdditionalData: threeSceneJson.AdditionalData,
Version: strconv.Atoi(threeSceneJson.Version),
}
}
// 增加 Object3DDb 数据,同时增加对应的 ThreeSceneDb 数据
func addObject3DDb(object3DDb *Object3DDb) error {
// 增加 Object3DDb 数据
if err := db.Create(object3DDb).Error; err != nil {
return err
}
// 增加对应的 ThreeSceneDb 数据
threeSceneDb := &ThreeSceneDb{
SceneID: object3DDb.SceneID,
Type: object3DDb.Type,
Version: object3DDb.Version,
}
if err := db.Create(threeSceneDb).Error; err != nil {
return err
}
return nil
}
// 删除 Object3DDb 数据,同时删除对应的 ThreeSceneDb 数据
func deleteObject3DDb(sceneID string) error {
// 删除 Object3DDb 数据
if err := db.Where("scene_id = ?", sceneID).Delete(&Object3DDb{}).Error; err != nil {
return err
}
// 删除对应的 ThreeSceneDb 数据
if err := db.Where("scene_id = ?", sceneID).Delete(&ThreeSceneDb{}).Error; err != nil {
return err
}
return nil
}
// 更新 Object3DDb 数据,同时更新对应的 ThreeSceneDb 数据的 Version 字段
func updateObject3DDb(object3DDb *Object3DDb) error {
// 更新 Object3DDb 数据
if err := db.Save(object3DDb).Error; err != nil {
return err
}
// 更新对应的 ThreeSceneDb 数据的 Version 字段
if err := db.Model(&ThreeSceneDb{}).Where("scene_id = ?", object3DDb.SceneID).Update("version", object3DDb.Version).Error; err != nil {
return err
}
return nil
}
// 查询 Object3DJson 数据,根据 SceneID 进行分页查询
func getObject3DJson(sceneID string, pageNum, pageSize int) ([]*Object3DJson, error) {
var object3DDbList []*Object3DDb
if err := db.Where("scene_id = ?", sceneID).Limit(pageSize).Offset((pageNum - 1) * pageSize).Find(&object3DDbList).Error; err != nil {
return nil, err
}
object3DJsonList := make([]*Object3DJson, len(object3DDbList))
for i, object3DDb := range object3DDbList {
object3DJsonList[i] = &Object3DJson{
SceneID: strconv.Itoa(object3DDb.SceneID),
Uuid: strconv.Itoa(object3DDb.Uuid),
Type: object3DDb.Type,
AdditionalData: object3DDb.AdditionalData,
Version: strconv.Itoa(object3DDb.Version),
}
}
return object3DJsonList, nil
}
// 查询 ThreeSceneJson 数据,返回所有数据
func getThreeSceneJson() ([]*ThreeSceneJson, error) {
var threeSceneDbList []*ThreeSceneDb
if err := db.Find(&threeSceneDbList).Error; err != nil {
return nil, err
}
threeSceneJsonList := make([]*ThreeSceneJson, len(threeSceneDbList))
for i, threeSceneDb := range threeSceneDbList {
threeSceneJsonList[i] = &ThreeSceneJson{
SceneID: strconv.Itoa(threeSceneDb.SceneID),
Type: threeSceneDb.Type,
AdditionalData: threeSceneDb.AdditionalData,
Version: strconv.Itoa(threeSceneDb.Version),
}
}
return threeSceneJsonList, nil
}
```
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![.zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![gz](https://img-home.csdnimg.cn/images/20210720083447.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)