zoukankan      html  css  js  c++  java
  • go语言数据库操作, gorm框架

    type User struct{
    ID uint `gorm:"primary_key"`
    Name string
    Age int
    Birthday time.Time
    AddTime time.Time
    }

    连接数据库
    db, err := gorm.Open("mysql", "用户名:密码@tcp(地址:端口号)/数据库名")
    if err != nil {
    panic("连接数据库失败")
    }


    创建表

    db.SingularTable(true) //不设置,创建生成的表名都是默认是复数形式后面带s的,设置上这一句话,就不会默认带s了
    //db.CreateTable(&User{}) //创建表


    表内插入数据

    //user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
    //db.Create(&user) //插入数据

    查询


    查询出所有的数据,查询到的结果是个可循环的切片
    type User struct{
    ID uint `gorm:"primary_key"`
    Name string
    Age int
    Birthday time.Time
    }
    var user []User
    a :=db.Find(&user) #查询出所有的
    打印出来查询的东西
    for _, a:= range user {
    fmt.Println(a)
    fmt.Println(a.ID)
    }

    查询出所有符合条件的数据,查询到的结果是个可循环的切片

    var user []User
    //select * from user where name="Jinzhu1"
    a :=db.Where("name = ?", "Jinzhu1").Find(&user) //Find是查询所有,First查询出一条
    for _, a:= range user {
    fmt.Println(a)
    fmt.Println(a.ID)
    }

    db.Where("name = ?", "jinzhu").First(&users) //查询出一条符合的数据
    db.Where("name <> ?", "jinzhu").Find(&user) //查出name不等于jinzhu的数据
    db.Where("name in (?)", []string{"jinzhu", "jinzhu1"}).Find(&user) //查询出name in ("jinzhu", "jinzhu1") 所有数据
    db.Where("name LIKE ?", "%jin%").Find(&user) //模糊查询 select * from user where name LIKE "%jin%"
    db.Where("name = ? AND age >= ?", "jinzhu", "17").Find(&user) //select * FROM user Where name ="jinzhu" AND age>17
    db.Where(&User{Name: "jinzhu", Age: 20}).First(&user) //SELECT * FROM users WHERE name = "jinzhu" AND age = 20 LIMIT 1;
    db.Where(map[string]interface{}{"name": "jinzhu", "age": 20}).Find(&users) //SELECT * FROM users WHERE name = "jinzhu" AND age = 20;
    db.Where([]int64{1, 2, 3}).Find(&user) //SELECT * FROM users WHERE id IN (20, 21, 22);
    用结构体查询的时候,GORM只会与非零条件查询,查询条件中的 0 ,"",false获取他零值,它不会被用来构成查询条件,例如
    db.Where(&User{Name: "jinzhu", Age: 0}).Find(&users) // SELECT * FROM users WHERE name = "jinzhu";


    查询出来的数据是单条的话
    user :=User{}
    db.Find(&user) // 查询
    fmt.Println(user.ID) //获取使用查询出来的某个字段

    更新
    单条更新的(包括自动更新的如当前时间的字段)
    user :=User{}
    db.First(&user) //查询出一条数据
    user.Name="334" //给数据赋新值
    db.Save(&user) //更新 UPDATE users SET name='334' WHERE id=1;但是如果表中有自动更新的字段,如时间更新当前的时间,那么用Save也会把这些一块更新的

    单条更新更新改变字段
    user := User{}
    db.Model(&user).Update("name","啊") //更新所有的数据 name="啊"

    更新符合条件的数据
    db.Model(&user).Where("id = ?", 1).Update("name", "hello")
    更新所有数据的多个字段
    db.Model(&user).Updates(map[string]interface{}{"name": "hello", "age": 18})
    更新所有数据的多个字段
    db.Model(&user).Updates(User{Name: "hello", Age: 18})
    下面这个不会被更新,只会更新非空白的值,即非 0,false ,""等
    db.Model(&user).Updates(User{Name: "", Age: 0})
    更新字段忽略选定的字段,下面忽略了name omit中的
    db.Model(&user).Omit("name").Updates(map[string]interface{}{"name": "321", "age": 118})
    更新选定的字段,只更新name字段即Select里面的字段
    db.Model(&user).Select("name").Updates(map[string]interface{}{"name": "hello", "age": 18})

    批量更新符合条件的数据
    db.Table("user").Where("id IN (?)", []int{1, 2}).Updates(map[string]interface{}{"name": "aa", "age": 9})
    db.Model(User{}).Where("id IN (?)",[]int{1,2}).Updates(User{Name: "cc", Age: 13})

    删除
    user := User{}
    db.Delete(&user) //删除表里的所有数据了
    带条件的删除
    db.Where("name LIKE ?", "%jinzhu%").Delete(User{})

  • 相关阅读:
    Linux下卸载Oracle 11g
    Oracle
    Oracle 数据库启动与关闭
    1-centos7安装oracle 11gR2
    0-windows7硬盘安装centos7
    查重 查重复记录 删除重复记录
    用户情景快速指南
    智能led灯具HMI(无线终端参数设置界面)
    LBDP-Z APP在线升级指南
    智能led灯具HMI(用户模块及管理员模块)操作说明
  • 原文地址:https://www.cnblogs.com/wasayezi/p/9752577.html
Copyright © 2011-2022 走看看