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


  • 相关阅读:
    【边框回归】边框回归(Bounding Box Regression)详解(转)
    【ROI Pooling】ROI Pooling层详解(转)
    【课程笔记】优秀课程笔记整理
    【TensorFlow/简单网络】MNIST数据集-softmax、全连接神经网络,卷积神经网络模型
    jQuery中ajax请求的六种方法(三、三):$.post()方法
    jQuery中ajax请求的六种方法(三、二):$.get()方法
    jQuery中ajax请求的六种方法(三、一):$.ajax()方法
    jQuery中的常用方法:empty()、each()、$.each()、$.trim()、focus()(二)
    jQuery中获取属性值:attr()、html()、text()、val()等(一)
    简陋的Excel到MYSQL的数据传输JAVA实现
  • 原文地址:https://www.cnblogs.com/zisefeizhu/p/12788043.html
Copyright © 2020-2023  润新知