• gorm系列创建记录及字段默认值


    目录

    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:123456@tcp(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:123456@tcp(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:123456@tcp(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:123456@tcp(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`
    }
    


  • 相关阅读:
    无线路由器wds桥接技术+丢包率
    2016CCPC东北地区大学生程序设计竞赛1008/HDU 5929 模拟
    Codeforces Round #375 (Div. 2) A B C 水 模拟 贪心
    Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) A B C D 水 模拟 并查集 优先队列
    Codeforces Round #310 (Div. 2) A B C
    Codeforces Round #374 (Div. 2) A B C D 水 模拟 dp+dfs 优先队列
    Codeforces Round #313 (Div. 2) A B C 思路 枚举 数学
    Codeforces Round #373 (Div. 2) A B C 水 贪心 模拟(四舍五入进位)
    CentOS7 PostgreSQL 安装
    数据库事务的隔离级别
  • 原文地址:https://www.cnblogs.com/ExMan/p/15617246.html
Copyright © 2020-2023  润新知