import "github.com/jinzhu/gorm"
func initdb() {
// 第一个参数:数据库类型(mysql,postgres)
// 第二个参数:数据库连接,用户名:密码@protocal(ip:port)
conn := "root:root@tcp(192.168.1.12:3306)?charset=Utf8&parseTime=true&loc=Local"
db,err := gorm.Open("mysql", conn)
defer db.Close()
//SetMaxOpenConns用于设置最大打开的连接数
//SetMaxIdleConns用于设置闲置的连接数
db.DB().SetMaxIdleConns(10)
db.DB().SetMaxOpenConns(100)
}
type User struct{
Name string `gorm:"column:name"`
Age int `gorm:"default:18"`
Hobby []string `gorm:"column:interests"`
}
//注意最后hobby在数据库里的column是interests
func (User) TableName() string {
return "users"
}
user := User{
Name : "amber",
Age : 23,
Hobby : nil,
}
err := db.Create(&user).Error
注意:这里如果要创建多个,必须每次重新初始化user对象
第一种方式:根据筛选条件更新某几项参数
name := "necy"
age := 25
err := db.Model(&User).Where("name = ?", name).Update("age", age).Error
第二种方式:不管有没有更新项直接update
user := User{
Name : "amber",
Age : 23,
Hobby : nil,
}
// &user 传入的具体参数,如果里面包含主键,便只更新匹配主键的对象
err := db.Update(&user).Error
// &user{}更新所有user对象
err := db.Update(&user{}).Error
user := User{}
err := db.Where("name = ?", name).Delete(&user).Error
user := User{}
err := db.Where("name = ?", name).First(&user) //查询一个
user := []User{}
err := db.Where("name = ?", name).Find(&user) //只能用长度判断数据是否存在
var count int
err := db.Where("name = ?", name).Find(&user).Count(&count)
err := db.Table("users").Where("name = ?", name).Count(&count)
err := db.DEBUG().Where("name = ?", name).Find(&user).Count(&count)
注意:如果查询plunk这种非整条数据返回,log里显示 0rows return
func getMaxAge() {
max := 0
name = "amber"
rows, err := db.Table("users").Select(" MAX(age) AS max ").Where(" name = ? ", name ).Rows()
if err != nil {
common.Log.Error("查询最大值年龄报错 %v", err)
}
if rows.Next() {
err := rows.Scan(&max)
if err != nil {
common.Log.Error("报错 %v", err)
}
}
defer rows.Close()
}
// 初始化name要带引用
name := &[]string{}
err := db.DB.Debug().Table("users").Where("age>= ? AND score= (select max(score) from users)", 20).Pluck("name", name).Error
if err != nil {
fmt.Println(name)
}
select ip from devices where INET_ATON(ip) >= '192.168.1.0'
db.Where("INET_ATON(ip) >= INET_ATON(?)", "192.168.1.0")
var uuids []string
DB.Model(&User{}).Where("uuid IN (?)", uuids).UpdateColumn("age", 18).Error
// 每次取出指定数量数据,偏移量和指定数量要一致
var limit int
var offset int
DB.Debug().Limit(limit).Offset(offset).Find(&User{}).Error