赞
踩
一、数据库链接 github.com/jinzhu/gorm package utils import ( "fmt" _ "github.com/go-sql-driver/mysql" "github.com/jinzhu/gorm" ) type mysqlModel struct { Host string `yaml:"host"` Port int `yaml:"port"` User string `yaml:"user"` Password string `yaml:"password"` Database string `yaml:"database"` MaxIdLeConn int `yaml:"maxidleconn"` MaxOpenConn int `yaml:"maxopenconn"` Debug bool `yaml:"debug"` IsPlural bool `yaml:"isplural"` TablePrefix string `yaml:"tableprefix"` } var DB *gorm.DB var mysqlConfig = mysqlModel{ Host: "127.0.0.1", Port: 3308, User: "root", Password: "root123456", Database: "data_center", MaxIdLeConn: 10, MaxOpenConn: 100, Debug: false, IsPlural: true, TablePrefix: "data_center_", } func MysqlInit() error { var err error DbUrl := fmt.Sprintf("%s:%s@(%s:%d)/%s?charset=utf8", mysqlConfig.User, mysqlConfig.Password, mysqlConfig.Host, mysqlConfig.Port, mysqlConfig.Database) DB, err = gorm.Open("mysql", DbUrl) if err != nil { fmt.Printf("mysql connect error %v", err) } if DB.Error != nil { fmt.Printf("database error %v", DB.Error) } //最大打开的连接数 DB.DB().SetMaxOpenConns(mysqlConfig.MaxOpenConn) //最大空闲连接数 DB.DB().SetMaxIdleConns(mysqlConfig.MaxIdLeConn) //允许表名复数 DB.SingularTable(mysqlConfig.IsPlural) DB.LogMode(mysqlConfig.Debug) return err }
//表结构体
type User struct { ID int Name string Age int AddTime int }
//判断表不存在自动创建表 func init() { if !utils.DB.HasTable(&User{}) { utils.DB.AutoMigrate(&User{}) } }
/*查询所有数据*/ user := []User{} utils.DB.Find(&user) /* 查询所有数据 age=12 user := []User{} utils.DB.Find(&user, "age = ?", 12) */ /* 查询一条数据 id=2 user := User{ID:2} utils.DB.First(&user) */ /*查询一条name=plum的数据 user := User{} utils.DB.First(&user, "name = ?", "plum") */ //新增 user := User{ Name:"张三", Age:22, AddTime:int(time.Now().Unix()), } utils.DB.Create(&user) //修改数据 user := User{ID:1} utils.DB.First(&user) user.Name = username user.Age = age utils.DB.Save(&user) //删除数据 user := User{ID:1} utils.DB.Delete(&user) //执行原生sql语句 sql := `UPDATE user SET age = 66 WHERE id = 1;` err := utils.DB.Exec(sql).Error if err != nil { fmt.Print("修改消息失败:", err.Error()) } //查询总条数 Count 返回int total :=0 utils.DB.Table("user").Count(&total)
二、数据库链接 gorm.io/gorm 使用
package Database import ( "fmt" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/schema" "time" "ruiyi/plum/gin/Common" ) var DB *gorm.DB func MysqlInit() (err error) { mysqlConfig := Common.MysqlInfo DB, err = gorm.Open(mysql.New(mysql.Config{ DSN: fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", mysqlConfig.User, mysqlConfig.Password, mysqlConfig.Host, mysqlConfig.Port, mysqlConfig.Database), DefaultStringSize: 256, // string 类型字段的默认长度 DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持 DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引 DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列 SkipInitializeWithVersion: false, // 根据版本自动配置 }), &gorm.Config{NamingStrategy: schema.NamingStrategy{ SingularTable: mysqlConfig.IsPlural, //允许表名复数 `User` 的表名应该是 `t_users` 如果该值为true则表名为`t_user` //TablePrefix: mysqlConfig.TablePrefix, // 表名前缀 }}) sqlDB, err := DB.DB() //设置空闲连接池中连接的最大数量 sqlDB.SetMaxIdleConns(mysqlConfig.MaxIdLeConn) //设置打开数据库连接的最大数量 sqlDB.SetMaxOpenConns(mysqlConfig.MaxOpenConn) //设置了连接可复用的最大时间 sqlDB.SetConnMaxLifetime(time.Hour) //defer sqlDB.Close() return err }
//数据库操作基本与github.com/jinzhu/gorm 一致,区别:count返回的是int64
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。