专栏首页大话swiftgorm入门之概述

gorm入门之概述

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. 开发者友好

安装

    go get -u github.com/jinzhu/gorm

快速入门

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

  _ "github.com/go-sql-driver/mysql"
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)
}
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

本文分享自微信公众号 - 大话swift(gh_ca2266b7cab0),作者:寒云

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • gorm之CURD-查询篇

    现在的互联网产品早已经和数据库紧密的结合在了一起,后端每天都要和数据库打交道,而且更多的时候是进行查询操作,可以说互联网产品绝大多数时间都是在查询。这篇文章我们...

    大话swift
  • 关于交易的gas 与gassPrice概念已经交易阻塞

    以太坊的交易是通过旷工从矿池中挖矿完成的,而挖矿是❓通俗讲就是将矿池中提交的交易按照价格高低进行筛选打包成块的过程

    大话swift
  • gorm之Belongs To--属于

    那么我们gorm中怎么建立这种属于关系呢?又是怎么表示的呢?为了照顾有些小伙伴的情绪,我们一用户和邮箱、用户和手机号为例。 用户表结构

    大话swift
  • Go开源ORM——GORM

    可以通过定义嵌套gorm.Model这个结构体的类型来定义实体类,gorm.Model中定义了数据库表的一些常用基本字段

    歪歪梯
  • gorm之CURD-查询篇

    现在的互联网产品早已经和数据库紧密的结合在了一起,后端每天都要和数据库打交道,而且更多的时候是进行查询操作,可以说互联网产品绝大多数时间都是在查询。这篇文章我们...

    大话swift
  • 使用RESTful风格开发Java Web

    我没有三颗心脏
  • MongoDB

    一 简介 MongoDB是一款强大、灵活、且易于扩展的通用型数据库 1、易用性 MongoDB是一个面向文档(document-oriented)的数据库,而不...

    用户1214487
  • 使用RESTful风格开发Java Web

    REST是REpresentational State Transfer的缩写(一般中文翻译为表述性状态转移),REST 是一种体系结构,而 HTTP 是一种包...

    我没有三颗心脏
  • MongoDB第四期:SQL 与 MongoDB 映射(入门)

    传统的关系数据库一般由数据库、表、记录三个层次概念组成,MongoDB是由数据库、集合、文档对象三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没...

    迪B哥
  • Angular自定义structural指令的一个例子

    The is a syntax element recognized by the Angular parser. It’s not a directive,...

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券