golang之gorm使用mysql实例

8 篇文章 0 订阅
一、数据库链接  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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值