goland连接数据库

连接数据库

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{ Namestring`gorm:"column:name"` Ageint`gorm:"default:18"` Hobby[]string `gorm:"column:interests"` } //注意最后hobby在数据库里的column是interestsfunc (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)

开启debug模式:
err := db.DEBUG().Where("name = ?", name).Find(&user).Count(&count)

【goland连接数据库】注意:如果查询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() }

获取成绩最高且年龄大于20的同学名字
// 初始化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) }

查询大于指定ip的数据
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

    推荐阅读