gorm 这样写不会有点乱么
//learn from https://juejin.cn/post/6844904090196000775package mainimport ("time""github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql")type User struct {Id uint `gorm:"AUTO_INCREMENT"`Name string `gorm:"size:50"`Age int `gorm:"default:18"`Birthday *time.TimeEmail string `gorm:"type:varchar(50);unique_index"`Password string `gorm:"type:varchar(25)"`}var db *gorm.DB //GORM 提供了 DB 方法,可用于从当前 *gorm.DB 返回一个通用的数据库接口 *sql.DB/*func main() {//DBResolver的用法db, err := gorm.Open("mysql", "root:123456@(localhost)/dbtest1?charset=utf8mb4&parseTime=True&loc=Local")if err != nil {fmt.Errorf("创建数据库连接失败:%v", err)}defer db.Close()//自动迁移数据结构table scheme,会创建表,确实表的外键,约束,列和索引。db.AutoMigrate(&User{}, &Product{}, &Order{})//为User创建表 db.Migrator().CreateTables(&User{})// 出于保护数据的目的,它不会删除未使用的列;且其会自动创建数据库外键约束// 返回当前使用的数据库名 db.Migrator().CurrentDatabase()db.AutoMigrate(&User{}) //如果出现了这句有问题,可能是因为_ "github.com/jinzhu/gorm/dialects/mysql"其依赖没有导入//在gorm中,默认的表名都是结构体名称的复数形式,比如User结构体默认创建的表为Users//db.SingularTable(true)可以取消表名的复数形式,使得表名和结构体名称一致//添加唯一索引db.Model(&User{}).AddUniqueIndex("name_email", "id", "name", "email")//插入记录db.Create(&User{Name: "张三", Age: 18, Email: "zhangshan@163.com"})db.Create(&User{Name: "李四", Age: 20, Email: "lisi@qq.com"})var user User //是用来接收(映射)查到的值的吗var users []User //同上//查看插入后的全部元素fmt.Printf("插入后元素:\n")db.Find(&users)fmt.Println(users) //打印全部元素db.First(&user, "name = ?", "小明")//查询一条记录db.First(&user, "name = ?", "张三")fmt.Println("查询记录:", user) //查到的只有张三的记录//更新记录(基于查出来的数据进行更新)db.Model(&user).Update("name", "Mike") // 查出来的值仍然存在之前的结构体变量中,所以对之前的结构体进行操作就可以了fmt.Println("更改后的记录为:", user)//删除记录db.Delete(&user)//查看全部记录fmt.Println("查看全部记录:")db.Find(&users)fmt.Println(users)var user1 User //每次要执行查询之类的都要重新定义接收者,不然还是之前那个接收者的值db.First(&user1)fmt.Println(user1)// 为啥我这个批量添加不可以呢?// var usersInsert = []User{{Name:"jinzhu1",Age: 12},{Name: "jinzhu2",Age: 12}}// db.Create(&usersInsert)// 获取条件全部匹配的记录db.Create(&User{Name: "李四"})db.Create(&User{Name: "李四"})var users1 []Userdb.Where("name = ?", "李四").Find(&users1)fmt.Println(users1)}*/
with raw sql
package mainimport ("fmt""github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql")type Result struct {ID intName stringAge int}func main() {// 使用原生sql来查询var result Resultdb, _ := gorm.Open("mysql", "root:123456@(localhost)/dbtest1?charset=utf8mb4&parseTime=True&loc=Local")db.Raw("SELECT id,name,age FROM users Where id = ?", 3).Scan(&result)fmt.Println(result)//执行原生sql// db.Exec("DROP TABLE users")}
