gin框架学习三之gorm

使用gorm 操作mysql

git 地址:

 https://github.com/hailin86/ginApi/tree/gorm

在app目录新建 model 文件夹 

在model 包下初始化 DB 代码如下

var DB *gorm.DB

func InitDB(sqlConn string)  {
   newLogger := logger.New(
      log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
      logger.Config{
         SlowThreshold: time.Second,   // 慢 SQL 阈值
         LogLevel:      logger.Warn, // Log level
         Colorful:      false,         // 禁用彩色打印
         IgnoreRecordNotFoundError: true, //禁用 当查询 record not not 的时候不打印日志
      },
   )

   db, err := gorm.Open(mysql.Open(sqlConn), &gorm.Config{

      Logger:newLogger,
      //禁用表名复数
      NamingStrategy:schema.NamingStrategy{
         SingularTable: true,
      },

      //创建并缓存预编译语句
      PrepareStmt:true,
      //跳过默认事务
      SkipDefaultTransaction:true,

   })

   // Error
   if sqlConn == "" || err != nil {
      panic(err)
   }

   sqlDB, err := db.DB()
   if err != nil {
      panic(err)
   }

   //设置连接池 一般情况上面的两个函数是一起使用的,而且最大连接数的设置,必须要大于最大可空闲连接数
   //最大空闲数
   sqlDB.SetMaxIdleConns(10)
   //最大链接数
   sqlDB.SetMaxOpenConns(100)

   DB = db

}

zai main.go 初始化DB 

一下是gorm 的基本操作

type Product struct {
   Id int `json:"id"`
   Name string `json:"name"`
   Price float64 `json:"price"`
   Status int `json:"status"`
   //...
   Created time.Time `json:"created"`
   Modified time.Time `json:"modified"`

}


//增
func AddProduct(model *Product) (int,error)  {
   err := DB.Create(&model).Error
   if err != nil {
      return 0,err
   }
   return model.Id,nil
}

//批量添加
func BatchAddProduct(ml []*Product) (err error)  {
   err = DB.Create(&ml).Error
   return
}

//删
func DelProduct(model *Product) error  {
   err := DB.Delete(model).Error
   return err
}

//改
func UpdateProduct (model *Product) error {
   err := DB.Save(model).Error
   return err
}


//查
//通过主键查询
func GetProductById(id int) (model *Product,err error)  {
   err = DB.First(&model,id).Error
   if err != nil {
      return nil,err
   }
   return model,nil
}

//通过普通字段查询
func GetProductByName(name string) (model *Product,err error)  {
   err = DB.Where("name = ?",name).First(&model).Error
   if err != nil {
      return nil,err
   }
   return model,nil
}

//列表查询
func ListProductByStatus(status int) (ml []*Product,err error) {
   err = DB.Where("status = ?",status).Find(&ml).Error
   if err != nil {
      return nil,err
   }
   return ml,nil
}


type MyProduct struct {
   Id int `json:"id"`
   Name string `json:"name"`
}
//模拟选中字段查询 //比如我要查询的列表只想有 id name 字段
func ListProductByIds(ids []int) (ml []*MyProduct,err error) {
   //下面这两种写法都可以
   err = DB.Table("product").Select([]string{"id","name"}).Where("id in ?",ids).Find(&ml).Error
   //err = DB.Model(Product{}).Select([]string{"id","name"}).Where("id in ?",ids).Find(&ml).Error
   if err != nil {
      return nil,err
   }
   return ml,nil
}


//分页查询
func ListProductByPage(page,limit int)(ml []*Product,err error)  {
   offset := (page -1) *limit
   err = DB.Limit(limit).Offset(offset).Order("id desc").Find(&ml).Error
   if err != nil {
      return nil,err
   }
   return ml,nil
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值