Gorm学习笔记

Go语言ORM框架:gorm/xorm

ORM框架解决了对象/实例 与关系型数据库的映射,解决了程序员不想写数据库语句的问题

对应关系

  • 数据表 <–> 类、结构体

  • 数据行 <–> 对象、实例

  • 数据字段 <–> 属性、结构体字段

gorm中文文档:http://gorm.io/zh_CN/docs/
github地址:https://github.com/jinzhu/gorm

例子

package main

import (
	"database/sql"
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

// 定义好的结构体,在数据库中,会全部小写,并且+s作为表名
type Product struct {
	gorm.Model
	Code  string
	Price uint
	Name  string
}


type User struct {
	ID   string // 名为`ID`的字段会默认作为表的主键
	Name string
}

// 将 User 的表名设置为 `profiles`
func (User) TableName() string {
	return "profiles"
}

// 用*string可以把空字符串存入数据库中
type Animal struct {
	ID   int64
	Name *string `gorm:"default:'galeone'"`
	Age  int64
}

// 用这个可以把空字符串存入数据库中
type Animal2 struct {
	ID   int64
	Name sql.NullString `gorm:"default:'galeone'"`
	Age  int64
}

func main() {
	// 连接数据库
	db, err := gorm.Open("mysql", "root:wxlzs999/gorm_demo?charset=utf8mb4&parseTime=True&loc=Local")
	if err != nil {
		panic("failed to connect database")
	}
	defer db.Close()

	// 自动迁移
	db.AutoMigrate(&Product{}, &User{}, &Animal{}, &Animal2{}) //

	// 创建
	db.Create(&Product{Code: "L1212", Price: 1000})

	// 读取
	var product Product
	db.First(&product, 1)                   // 查询id为1的product
	db.First(&product, "code = ?", "L1212") // 查询code为l1212的product

	// 更新 - 更新product的price为2000
	db.Model(&product).Update("Price", 2000)

	// 删除 - 删除product
	// Gorm是软删除
	db.Delete(&product)

	n := ""
	var animal3 = Animal{Age: 99, Name: &n} // 名字就叫空字符串
	var animal2 = Animal{Age: 99}  // Name用默认值,即空

	db.Create(&animal3)
	db.Create(&animal2)

	var animal4 = Animal2{
		Name: sql.NullString{
			String: "",   // 值是什么
			Valid:  true, // 该字段有值
		},
		Age: 19,
	}
	db.Create(&animal4)

	// 查询
	var animalList []*Animal
	// 从数据库中按照条件查询并把结果填充到我们传进去的变量
	db.Debug().Select("name, age").Where("age = ?", 99).Find(&animalList)
	fmt.Printf("%#v\n", animalList)
}

总结

- 别忘了导入驱动
- gorm.Model
- Model结构体支持的tag
- 字段默认值
- 增删改查
- 钩子函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值