前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >gorm入门之概述

gorm入门之概述

作者头像
大话swift
发布2020-03-26 16:38:10
发布2020-03-26 16:38:10
1.5K00
代码可运行
举报
文章被收录于专栏:大话swift大话swift
运行总次数:0
代码可运行

GORM 指南

什么是orm?简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。用orm框架可以快速的进行数据库操作。

概览(gorm的优点)

  1. 全功能 ORM (无限接近)
  2. 关联 (Has One, Has Many, Belongs To, Many To Many, 多态)
  3. 钩子 (在创建/保存/更新/删除/查找之前或之后)
  4. 预加载
  5. 事务
  6. 复合主键
  7. SQL 生成器
  8. 数据库自动迁移
  9. 自定义日志
  10. 可扩展性, 可基于 GORM 回调编写插件
  11. 所有功能都被测试覆盖
  12. 开发者友好

安装

代码语言:javascript
代码运行次数:0
运行
复制
    go get -u github.com/jinzhu/gorm

快速入门

我们以mysql为例,首先要引入mysql的驱动

代码语言:javascript
代码运行次数:0
运行
复制
  _ "github.com/go-sql-driver/mysql"
代码语言:javascript
代码运行次数:0
运行
复制
package models

import (
  "fmt"
  "ginLearn.com/utils"
  _ "github.com/go-sql-driver/mysql"
  "github.com/jinzhu/gorm"
  "log"
)

type Model struct {
  ID        uint `gorm:"primary_key"`
  CreatedAt utils.JSONTime
  UpdatedAt utils.JSONTime
  DeletedAt *utils.JSONTime `sql:"index"`
}

var db *gorm.DB

func init() {
  setup()
}

// 获得MySQL的资源链接
func DB() *gorm.DB {
  return db
}

// Setup initializes the database instance
func setup() {
  var err error
  db, err = gorm.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local",
    "root",
    "12345678",
    "127.0.0.1",
    3306,
    "gorm"))

  if err != nil {
    log.Fatalf("models.Setup err: %v", err)
  }
  //采用复数的表名
  db.SingularTable(false)
  //自动数据迁移
  db.AutoMigrate(User{})
  //打印日志
  db.LogMode(true)
  db.DB().SetMaxIdleConns(10)
  db.DB().SetMaxOpenConns(100)
}
代码语言:javascript
代码运行次数:0
运行
复制
package main

import (
  "fmt"
  "ginLearn.com/models"
)

func main() {
  db := models.DB()
  user := models.User{}
  //插入数据
  //INSERT INTO `users` (`created_at`,`updated_at`,`deleted_at`) VALUES ('2020-03-16 11:19:31','2020-03-16 11:19:31',NULL)
  u := db.Create(&user)
  //获得受影响的行数,大于等于1说明成功
  fmt.Println(u.RowsAffected)
  //查询id为1的用户 正序
  //SELECT * FROM `users`  WHERE `users`.`deleted_at` IS NULL AND `users`.`id` = 1 AND ((`users`.`id` = 1)) ORDER BY `users`.`id` ASC LIMIT 1
  db.First(&user, 1)
  //查询id为1的最后一位用户 逆序
  //SELECT * FROM `users`  WHERE `users`.`deleted_at` IS NULL AND `users`.`id` = 2 AND ((`users`.`id` = 1)) ORDER BY `users`.`id` DESC LIMIT 1
  db.Last(&user, 1)
  //更新 全部字段
  //UPDATE `users` SET `created_at` = '2020-03-16 11:31:42', `updated_at` = '2020-03-16 11:31:42', `deleted_at` = NULL, `name` = 'hanyun'  WHERE `users`.`deleted_at` IS NULL AND `users`.`id` = 5
  user.Name = "hanyun"
  db.Save(&user)
  //更新 某个字段
  //UPDATE `users` SET `name` = 'hahhaha', `updated_at` = '2020-03-16 11:35:18'  WHERE `users`.`deleted_at` IS NULL AND `users`.`id` = 9
  db.Model(&user).Update("name", "hahhaha")
  //软删除,没有真正的从数据库删除数据
  //UPDATE `users` SET `deleted_at`='2020-03-16 11:24:06'  WHERE `users`.`deleted_at` IS NULL AND `users`.`id` = 3
  db.Delete(&user)
  //物理删除,真正的从数据库删除数据
  //DELETE FROM `users`  WHERE `users`.`id` = 4
  //db.Unscoped().Delete(&user)
}

链接:https://pan.baidu.com/s/1nX8zcvVUfbB3mo8LFp9nPA

提取码:mvs5

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大话swift 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • GORM 指南
    • 概览(gorm的优点)
      • 快速入门
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档