gorm之概述

219 阅读2分钟

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
    

快速入门

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)
}


链接:pan.baidu.com/s/1nX8zcvVU… 提取码:mvs5 复制这段内容后打开百度网盘手机App,操作更方便哦