连接mysql、增删改查示例
package main import ( "fmt" "github.com/jinzhu/gorm" _"github.com/jinzhu/gorm/dialects/mysql" // 这里没有直接使用,匿名导入 ) type User struct { //gorm.Model UserId int64 `gorm:"primary_key"` UserName string } func main() { db, err := gorm.Open("mysql","root:123456@(127.0.0.1)/czx_dev?charset=utf8mb4&parseTime=True&loc=Local") if err != nil { panic(err) } defer db.Close() fmt.Println("连接成功") db.AutoMigrate(&User{}) /* // 添加数据 user001 := &User{UserName: "stefan"} user002 :=&User{ UserName: "jerry", } user003 :=&User{ UserName: "Tom", } user004 :=&User{ UserName: "xaioming", } db.Create(&user001) db.Create(&user002) db.Create(&user003) db.Create(&user004)*/ // 查询数据 var userinfo User db.Find(&userinfo) fmt.Printf("信息:%#v\n",userinfo) // 条件查询 var uu User db.Find(&uu,"user_name=?","Tom") fmt.Printf("%#v\n",uu) // 更新数据 db.Model(&userinfo).Update("user_name","new_name") // 删除数据 db.Delete(&uu) }
默认表明 和字段的操作
package main import ( "database/sql" "fmt" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" // 这里没有直接使用,匿名导入 "time" ) // https://www.liwenzhou.com/posts/Go/gorm/ 李文周博客文档 type User struct { //gorm.Model UserId int64 `gorm:"primary_key"` UserName string } type Good struct { // // 将 `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt`字段注入到`Good`模型中 gorm.Model // GoodName string } type ModelTest struct { gorm.Model Name string Age sql.NullInt64 Birthday *time.Time Email string `gorm:"type:varchar(100);unique_index"` Role string `gorm:"size:255"` MemberNumber *string `gorm:"unique;not null"` Num int `gorm:"AUTO_INCREMENT"` Adress string `gorm:"index:addr"` IgnoreMe int `gorm:"-"` } // 表名默认是结构体名称的复数 `ModelTest`,`Users` type TableTest struct { gorm.Model Name string } func (t TableTest)TableName() string { return "mytables" } // 使用结构体的Tat 指定列名 type Animal struct { AnimalId int64 `gorm:"column:bease_id"` Name string `gorm:"column:a_name"` Age int64 `gorm:"column:a_age"` Birthday time.Time `gorm:"column:day_of_birthday"` CreatedAt time.Time `gorm:"column:column:day_of_create"` } type Test002 struct { Aame string Age int64 } // GORM 支持更改默认表名名称规则 func main() { db, err := gorm.Open("mysql", "root:123456@(127.0.0.1)/czx_dev?charset=utf8mb4&parseTime=True&loc=Local") if err != nil { panic(err) } defer db.Close() fmt.Println("连接成功") db.SingularTable(true) // 这个开关 和 默认表明是不冲突的,不管以怎么样的规则创建新的表 // 如果没有打开,false 的话, 创建的表明永远是自己规则表名的复数 形式。 // gorm 支持自己修改默认表名的规则。 // db.SingularTable(true) 就是 prefix_ + 结构体名称 // db.SingularTable(fause) 就是 prefix_ + 结构体名称复数 形式 gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string { return "prefix_" + defaultTableName } db.AutoMigrate(&User{},ModelTest{},&TableTest{},&Animal{},&Test002{}) /* 使用 Test002 接头体创建 名为 `test003` 的 表 测试怎么没反应呢? 也可以通过Table()指定表名: 好像没反应 */ db.Table("test003").Create(&Test002{}) // 这个创建数据表好像没有创建,我觉得这个应该是往某张表添加数据的操作 添加具体的数据的。不是创建表的。 db.Create("test002").Create(&Test002{"stefan",11}) db.Table("animal").Create(&Animal{111,"dog",25,time.Now(),time.Now()}) // 添加数据 user001 := &User{UserName: "stefan"} user002 :=&User{ UserName: "jerry", } user003 :=&User{ UserName: "Tom", } user004 :=&User{ UserName: "xaioming", } db.Create(&user001) db.Create(&user002) db.Create(&user003) db.Create(&user004) // 查询数据 var userinfo User db.Find(&userinfo) fmt.Printf("信息:%#v\n", userinfo) // 条件查询 var uu User db.Find(&uu, "user_name=?", "Tom") fmt.Printf("%#v\n", uu) // 更新数据 db.Model(&userinfo).Update("user_name", "new_name") // 删除数据 db.Delete(&uu) var infos []Test002 db.Table("test002").Find(&infos) fmt.Printf("res: %#v\n",infos,"-------------\n",len(infos)) }