goland连接数据库

参考连接: https://www.tizi365.com/archives/20.html

连接数据库
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

第三种方式:save保存及更新

user := User{
		Name : "amber",
		Age  :  23,
		Hobby : nil,
	}
	// 此时会先在数据库种查找一遍,若user对象不存在会创建,若user对象已存在则更新user对象
	err := db.Save(&user).Error

save时报错: Error 1062: Duplicate entry ‘c2ba36f4161d4ccea2717b832552c57c’ for key ‘uniq_uuid’

原因分析:代码里定义数据库模型时没有id,但在数据库种id作为自增键,代码里不写在执行其他方法时不会报错,但在save里会报错

删除数据
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()
}
方式二
//注意这里查询出的列名要与gorm:"column里指定的一致,否则查出的数据全部是0

func getMaxAge() {
	Age:= &struct {
	    SumAge int `gorm:"column:sum_age"`
	}{}
	    
	if err := DB.Raw("select sum(age) as sum_age from users where uuid = ?", id).Scan(ingress).Error; err != nil {
	     common.Log.Error("报错 %v", err)
	}   
}
获取成绩最高且年龄大于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
排序
// 查询年龄大于18的学生,并降序排列
db.Where("age>= ?", 18).Order("age desc").Find(&user)
统计group by 后指定列个数
// 定义一个结构体存放取出的数据
type Result struct {
    Age   int
    Total int
}

var results []Result
//等价于: SELECT age, count(*) as  total FROM `user` GROUP BY age HAVING (total > 0)

db.Model(&User{}).Select("age, count(*) as  total").Group("age").Having("total > 5").Scan(&results)

// 统计相同年龄的孩子个数,注意select获取的列和group by的列要一致
GoLand 是一款由 JetBrains 公司开发的集成开发环境(IDE),专为使用 Go 语言开发的项目而设计。虽然 GoLand 本身不是一个高性能数据库,但它提供了与高性能数据库集成的功能和插件,让开发者能够更方便地与高性能数据库进行交互。 在 GoLand 中,我们可以通过配置和使用不同的数据库插件,与各种高性能数据库进行连接,并在 IDE 内直接进行数据库操作。这样一来,开发者无需离开 IDE,就可以进行数据库的查询、增、删、改等操作,大大提高了开发效率。 除了数据库插件的支持,GoLand 还提供了许多其他功能,帮助开发者编写高性能的数据库应用程序。例如,它集成了强大的代码编辑器,可以实时进行代码分析、智能补全等操作,大大提升了编码的效率和准确性。此外,GoLand 还提供了可靠的调试功能,开发者可以在数据库查询中添加断点,跟踪变量的值,快速定位问题并进行修复。 同时,GoLand 还支持版本控制系统,如 Git、SVN 等,让开发者能够更好地管理和共享数据库项目的代码。它还提供了集成测试工具,开发者可以方便地编写和运行单元测试、集成测试,确保数据库的高性能和稳定性。 总之,尽管 GoLand 本身不是一个高性能数据库,但它通过集成插件和强大的功能,为开发者提供了能够与高性能数据库集成的环境和工具。这使得开发者能够更方便地开发、调试和测试高性能数据库应用程序,提高了开发效率和质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值