选用扩展 gorm.io
- Install
go get -u gorm.io/gorm go get -u gorm.io/driver/sqlite
- Test models.go
package models
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/schema"
)
var (
dsn string = "gin:gingin@tcp(127.0.0.1:3306)/gin?charset=utf8mb4" // 数据库配置 root账号 0000密码 shop数据库 utf8mb4编码
)
//实现orm
func DB() *gorm.DB {
// 连接mysql数据库, gorm.Config有很多配置 例如前缀 后准 等等
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
NamingStrategy: schema.NamingStrategy{
TablePrefix: "tp_",
SingularTable: true,
},
})
// 数据库连接出错 退出
if err != nil {
fmt.Println("数据库连接失败", err)
panic(1)
}
// 返回数据库实例
db.AutoMigrate(&Goods{})
return db
}
Goods.go
package models
import "gorm.io/gorm"
// 商品查询
// 定义orm 字段
type Goods struct {
gorm.Model
GoodsId int // 对应 goods_id字段 如果表中有goodsid 和goods_id两个字段怎么弄
ShopId int
Name string
CategoryId int
GoodsName string
}
models_test.go
package models
import (
"fmt"
"testing"
)
func TestGetGoods(t *testing.T) {
// DB().Debug() 会打印实际执行语句
//增
goods := models.Goods{Name: "wahaha"}
models.DB().Create(&goods) // pass pointer of data to Create
//删
db.Delete(&Goods{}, 1)
// DELETE FROM tp_goods WHERE id = 10;
//查
/**
* where 语句使用 可以传递map[field]interface{}
* name=? and age=?
* Find(&rlt) 查找并返回数据到rlt
**/
where := map[string]interface{}{
"goods_id": 1,
}
var goods Goods
// unscoped 关闭软删除
DB().Debug().Where(where).Unscoped().Find(&goods)
fmt.Println("goods", goods)
}
go test -v