• 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`
    }
    


  • 相关阅读:
    斜率优化DP 总结(含凸优化)
    [Usaco2008 Mar]土地购买
    C#.NET 调用 MatlabBP神经网络工具箱——通过调用matlab引擎实现
    C# matalb混合编程/matlab神经网络工具箱无法编译/C#调用matlab工具箱函数“未定义与 'struct' 类型的输入参数相对应的函数 'sim'”
    .net 插件式开发——实现web框架中大数据算法嵌入(BP算法逼近)
    将java project打包成jar包,web project 打包成war包的几种演示 此博文包含图片
    SpringMVC+ajax返回JSON串
    怎样从SpringMVC返回json数据
    单点登录SSO
    linux 根据进程名查看其占用的端口
  • 原文地址:https://www.cnblogs.com/ExMan/p/15617246.html
Copyright © 2020-2023  润新知