gorm 这样写不会有点乱么

    1. //learn from https://juejin.cn/post/6844904090196000775
    2. package main
    3. import (
    4. "time"
    5. "github.com/jinzhu/gorm"
    6. _ "github.com/jinzhu/gorm/dialects/mysql"
    7. )
    8. type User struct {
    9. Id uint `gorm:"AUTO_INCREMENT"`
    10. Name string `gorm:"size:50"`
    11. Age int `gorm:"default:18"`
    12. Birthday *time.Time
    13. Email string `gorm:"type:varchar(50);unique_index"`
    14. Password string `gorm:"type:varchar(25)"`
    15. }
    16. var db *gorm.DB //GORM 提供了 DB 方法,可用于从当前 *gorm.DB 返回一个通用的数据库接口 *sql.DB
    17. /*
    18. func main() {
    19. //DBResolver的用法
    20. db, err := gorm.Open("mysql", "root:123456@(localhost)/dbtest1?charset=utf8mb4&parseTime=True&loc=Local")
    21. if err != nil {
    22. fmt.Errorf("创建数据库连接失败:%v", err)
    23. }
    24. defer db.Close()
    25. //自动迁移数据结构table scheme,会创建表,确实表的外键,约束,列和索引。
    26. db.AutoMigrate(&User{}, &Product{}, &Order{})
    27. //为User创建表 db.Migrator().CreateTables(&User{})
    28. // 出于保护数据的目的,它不会删除未使用的列;且其会自动创建数据库外键约束
    29. // 返回当前使用的数据库名 db.Migrator().CurrentDatabase()
    30. db.AutoMigrate(&User{}) //如果出现了这句有问题,可能是因为_ "github.com/jinzhu/gorm/dialects/mysql"其依赖没有导入
    31. //在gorm中,默认的表名都是结构体名称的复数形式,比如User结构体默认创建的表为Users
    32. //db.SingularTable(true)可以取消表名的复数形式,使得表名和结构体名称一致
    33. //添加唯一索引
    34. db.Model(&User{}).AddUniqueIndex("name_email", "id", "name", "email")
    35. //插入记录
    36. db.Create(&User{Name: "张三", Age: 18, Email: "zhangshan@163.com"})
    37. db.Create(&User{Name: "李四", Age: 20, Email: "lisi@qq.com"})
    38. var user User //是用来接收(映射)查到的值的吗
    39. var users []User //同上
    40. //查看插入后的全部元素
    41. fmt.Printf("插入后元素:\n")
    42. db.Find(&users)
    43. fmt.Println(users) //打印全部元素
    44. db.First(&user, "name = ?", "小明")
    45. //查询一条记录
    46. db.First(&user, "name = ?", "张三")
    47. fmt.Println("查询记录:", user) //查到的只有张三的记录
    48. //更新记录(基于查出来的数据进行更新)
    49. db.Model(&user).Update("name", "Mike") // 查出来的值仍然存在之前的结构体变量中,所以对之前的结构体进行操作就可以了
    50. fmt.Println("更改后的记录为:", user)
    51. //删除记录
    52. db.Delete(&user)
    53. //查看全部记录
    54. fmt.Println("查看全部记录:")
    55. db.Find(&users)
    56. fmt.Println(users)
    57. var user1 User //每次要执行查询之类的都要重新定义接收者,不然还是之前那个接收者的值
    58. db.First(&user1)
    59. fmt.Println(user1)
    60. // 为啥我这个批量添加不可以呢?
    61. // var usersInsert = []User{{Name:"jinzhu1",Age: 12},{Name: "jinzhu2",Age: 12}}
    62. // db.Create(&usersInsert)
    63. // 获取条件全部匹配的记录
    64. db.Create(&User{Name: "李四"})
    65. db.Create(&User{Name: "李四"})
    66. var users1 []User
    67. db.Where("name = ?", "李四").Find(&users1)
    68. fmt.Println(users1)
    69. }
    70. */

    with raw sql

    1. package main
    2. import (
    3. "fmt"
    4. "github.com/jinzhu/gorm"
    5. _ "github.com/jinzhu/gorm/dialects/mysql"
    6. )
    7. type Result struct {
    8. ID int
    9. Name string
    10. Age int
    11. }
    12. func main() {
    13. // 使用原生sql来查询
    14. var result Result
    15. db, _ := gorm.Open("mysql", "root:123456@(localhost)/dbtest1?charset=utf8mb4&parseTime=True&loc=Local")
    16. db.Raw("SELECT id,name,age FROM users Where id = ?", 3).Scan(&result)
    17. fmt.Println(result)
    18. //执行原生sql
    19. // db.Exec("DROP TABLE users")
    20. }