gorm存指针数据_gorm系列-创建记录及字段默认值

本文介绍了如何使用GORM在Go中进行数据库操作,包括创建记录和设置字段默认值。通过定义模型,连接数据库,使用AutoMigrate方法迁移表结构。当字段为零值时,GORM不会保存,但可以通过指针或Scanner/Valuer接口实现零值存储。示例展示了如何设置Name字段的默认值,并通过指针和sql.NullString来处理零值情况。
摘要由CSDN通过智能技术生成

Gorm创建记录及字段默认值

CRUD通常指数据库的增删改查操作

创建

package main

import (

"fmt"

"github.com/jinzhu/gorm"

_ "github.com/jinzhu/gorm/dialects/mysql"

)

//1. 定义模型

type User struct {

ID int64

Name string

Age byte

}

func main() {

//2. 连接Mysql数据库

db, err := gorm.Open("mysql","root:[email protected](127.0.0.1:3306)/db?charset=utf8mb4&parseTime=True&loc=Local")

if err != nil {

panic(err)

}

defer db.Close()

//3. 把模型与数据库中的表对应起来

db.AutoMigrate(&User{})

//4. 创建结构体实例

u := User{Name:"zisefeizhu", Age:22} //在代码层面创建一个User对象

fmt.Println(db.NewRecord(&u)) // 主键为空返回`true`

db.Create(&u) // 在数据库中创建一条user记录

fmt.Println(db.NewRecord(u)) // 创建`user`后返回`false`

}

//E:\gostudent\gin\lesson21>go run main.go

//true

//false

默认值

可以通过 tag 定义字段的默认值

func main() {

//2. 连接Mysql数据库

db, err := gorm.Open("mysql","root:[email protected](127.0.0.1:3306)/db?charset=utf8mb4&parseTime=True&loc=Local")

if err != nil {

panic(err)

}

defer db.Close()

//3. 把模型与数据库中的表对应起来

db.AutoMigrate(&User{})

//4. 创建结构体实例

//u := User{Name: "zisefeizhu",Age:30} //在代码层面创建一个User对象

//u := User{Age:30} //在代码层面创建一个User对象

u := User{Age:30} //在代码层面创建一个User对象

fmt.Println(db.NewRecord(&u)) // 主键为空返回`true`

db.Create(&u) // 在数据库中创建一条user记录

fmt.Println(db.NewRecord(u)) // 创建`user`后返回`false`

}

删除表在执行

上面代码实际执行的SQL语句是INSERT INTO users("age") values(‘30‘);,排除了零值字段Name,而在数据库中这一条数据会使用设置的默认值zisefeizhu作为Name字段的值。

注意:所有字段的零值, 比如0, "",false或者其它零值,都不会保存到数据库内,但会使用他们的默认值。 如果你想避免这种情况,可以考虑使用指针或实现 Scanner/Valuer接口,比如

u := User{Name: "",Age:50} //在代码层面创建一个User对象

fmt.Println(db.NewRecord(&u)) // 主键为空返回`true`

db.Debug().Create(&u) // 在数据库中创建一条user记录

使用指针方式实现零值存入数据库

import (

"fmt"

"github.com/jinzhu/gorm"

_ "github.com/jinzhu/gorm/dialects/mysql"

)

//1. 定义模型

type User struct {

ID int64

Name *string `gorm:"default:‘zisefeizhu‘"` //注意指针

Age byte

}

func main() {

//2. 连接Mysql数据库

db, err := gorm.Open("mysql","root:[email protected](127.0.0.1:3306)/db?charset=utf8mb4&parseTime=True&loc=Local")

if err != nil {

panic(err)

}

defer db.Close()

//3. 把模型与数据库中的表对应起来

db.AutoMigrate(&User{})

//4. 创建结构体实例

u := User{Name: new(string),Age:50} //在代码层面创建一个User对象

fmt.Println(db.NewRecord(&u)) // 主键为空返回`true`

db.Debug().Create(&u) // 在数据库中创建一条user记录

fmt.Println(db.NewRecord(u)) // 创建`user`后返回`false`

}

使用Scanner/Valuer接口方式实现零值存入数据库

import (

"database/sql"

"fmt"

"github.com/jinzhu/gorm"

_ "github.com/jinzhu/gorm/dialects/mysql"

)

//1. 定义模型

type User struct {

ID int64

//Name *string `gorm:"default:‘zisefeizhu‘"`

Name sql.NullString `gorm:"default:‘zisefeizhu‘"`

Age byte

}

func main() {

//2. 连接Mysql数据库

db, err := gorm.Open("mysql","root:[email protected](127.0.0.1:3306)/db?charset=utf8mb4&parseTime=True&loc=Local")

if err != nil {

panic(err)

}

defer db.Close()

//3. 把模型与数据库中的表对应起来

db.AutoMigrate(&User{})

//4. 创建结构体实例

//u := User{Name: new(string),Age:50} //在代码层面创建一个User对象

//u := User{Name: sql.NullString{"", true}, Age: 60}

u := User{Name: sql.NullString{"", false}, Age: 60}

fmt.Println(db.NewRecord(&u)) // 主键为空返回`true`

db.Debug().Create(&u) // 在数据库中创建一条user记录

fmt.Println(db.NewRecord(u)) // 创建`user`后返回`false`

}

原文:https://www.cnblogs.com/zisefeizhu/p/12788043.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值