选用扩展 gorm.io

  1. Install

go get -u gorm.io/gorm go get -u gorm.io/driver/sqlite

  1. 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