gorm以面向对象的编码方式对数据库读写操作进行了封装,将每一个数据实体当作一个结构体(类)进行处理。本片文章从实际开发中所遇问题和新的需求,对gorm进行一次封装,以此加快开发速度。
首先介绍代码架构:
|-----------------------
|- component
|-- db.go
|-- model.go
|-- test.go
|- include
|-- container.go
|-- db.go
|- init
|-- init.go
|- model
|-- bean
|--- messageRegister.go
|-- messageRegister.go
|- test
|-- messageRegister.go
|- main.go
|-----------------------
a. 入口文件: main.go
package main
import _ "./init"
import "./test"
func main() {
test.TMessageRegister()
}
b. 编写基础结构体和接口(component)
(1) 数据库连接相关, db.go
package component
import "github.com/jinzhu/gorm"
type SwyModel struct {
*gorm.DB
TableName string
}
(2) 数据实体相关, model.go
package component
import (
"encoding/json"
"github.com/jinzhu/gorm"
)
type DpModel struct {
gorm.Model
}
func translate(out interface{}, v interface{}) (interface{}, error) {
var (
err error
ms = make([]byte, 0, 64)
)
ms, err = json.Marshal(v)
if err != nil {
return nil, err
}
err = json.Unmarshal(ms, out)
if err != nil {
return nil, err
}
return out, nil
}
func (s *DpModel) Translate(out int