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{
	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)
开启debug模式:
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()
}
获取成绩最高且年龄大于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

你可能感兴趣的:(数据库)