不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • GO基础

  • 面向对象

  • 并发编程

  • 常用库

  • 数据库操作

    • GORM

      • 01.GORM入门
      • 02.GORM操作
        • 01.GORM介绍
          • 1.1 GORM是什么
          • 1.2 GORM功能介绍
          • 1.3 创建一个项目
        • 02.GORM基本使用
          • 2.1 安装gorm
          • 2.2 建立数据库链接
          • 2.3 关闭数据库链接
          • 2.4 定义数据库模型
          • 2.5 自动创建表
        • 03.GORM增删改查
          • 3.1 基本增删改查
          • 3.2 定义路由
      • 03.GORM查询
      • 04.GORM 关联查询
      • 05.GORM原生SQL
      • 06.GORMv2
      • 07.GORMgen
    • sqlx

    • database-sql

    • GORMv2

    • go-redis

    • redigo

    • elastic

  • Beego框架

  • Beego商城

  • GIN框架

  • GIN论坛

  • 微服务

  • 设计模式

  • Go
  • 数据库操作
  • GORM
xiaonaiqiang
2021-06-12
目录

02.GORM操作

# 01.GORM介绍

# 1.1 GORM是什么

  • GORM 是 golang 的一个 orm 框架,它是一个单独的 ORM 框架。

  • 相比 beego 自带的 orm 框架,语法要更友好一些,关联查询更简单、功能更强大一些。

  • 简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术

  • 是"对象-关系 映射"(Object/Relational Mapping) 的缩写

# 1.2 GORM功能介绍

Gorm 官方文档 (opens new window)

  • 全功能 ORM (无限接近)

  • 关联 (Has One, Has Many, Belongs To, Many To Many, 多态)

  • 钩子 (在创建/保存/更新/删除/查找之前或之后)

  • 预加载

  • 事务

  • 复合主键

  • SQL 生成器

  • 数据库自动迁移

  • 自定义日志

  • 可扩展性, 可基于 GORM 回调编写插件

  • 所有功能都被测试覆盖

  • 开发者友好

# 1.3 创建一个项目

bee new beegogorm
go mod init beegogorm
go build -mod=mod
1
2
3

# 02.GORM基本使用

# 2.1 安装gorm

go get -u github.com/jinzhu/gorm
1

# 2.2 建立数据库链接

  • models/core.go
package models
import (
	"github.com/astaxie/beego"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

var DB *gorm.DB
var err error

func init() {
	//和数据库建立连接
	DB, err = gorm.Open("mysql", "root:123456@/beego?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		beego.Error()
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 2.3 关闭数据库链接

package main
import (
	"beegogorm/models"
	_ "beegogorm/routers"

	"github.com/astaxie/beego"
)

func main() {
	beego.Run()
	defer models.DB.Close() //关闭数据库连接
}
1
2
3
4
5
6
7
8
9
10
11
12

# 2.4 定义数据库模型

  • models/user.go
package models

type User struct {
	Id       int
	Username string
	Age      int
	Email    string
	AddTime  int
}

//定义结构体操作的数据库表
func (User) TableName() string {
	return "user"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 2.5 自动创建表

  • 注意:GORM 的AutoMigrate函数,仅支持建表,不支持修改字段和删除字段,避免意外导致丢失数据。
  • GORM更多用法 (opens new window)
func init() {
	//和数据库建立连接
	DB, err = gorm.Open("mysql", "root:chnsys@2016@/beegodb?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		beego.Error()
	}

	if !DB.HasTable(&User{}){
		// 创建表
		DB.CreateTable(&User{})     // 根据User结构体建表
		DB.Set("gorm:table_options", "ENGINE=InnoDB").CreateTable(&User{})  // 设置表结构的存储引擎为InnoDB
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# 03.GORM增删改查

# 3.1 基本增删改查

  • controllers/user.go
package controllers

import (
	"beegogorm/models"
	"github.com/astaxie/beego"
	"time"
)

type UserController struct {
	beego.Controller
}

func (c *UserController) UserAdd() {        // 1.增
	user := models.User{
		Username: "zhangsan",
		Age:      26,
		Email:    "zhangsan.qq.com",
		AddTime:  int(time.Now().Unix()),
	}
	models.DB.Create(&user)
	c.Ctx.WriteString("增加数据成功")
}

func (c *UserController) UserDelete() {      // 2.删
	user := models.User{Id: 1}
	models.DB.Delete(&user)
	c.Ctx.WriteString("删除数据成功")
}

func (c *UserController) UserEdit() {       // 3.改
	//1、查找id=5的数据
	user := models.User{Id: 5}
	//models.DB.First(&user)

	//2、执行修改
	user.Username = "王五"
	models.DB.Save(&user)

	c.Ctx.WriteString("修改数据成功")
}

func (c *UserController) UserSelect() {      // 4.查
	//1、查询一条数据
	// user := models.User{Username: "lisi"}
	// models.DB.Find(&user)

	//2、查询所有数据
	user := []models.User{}
	models.DB.Find(&user)
	c.Data["json"] = user
	c.ServeJSON()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

# 3.2 定义路由

package routers
import (
	"beegogorm/controllers"
	"github.com/astaxie/beego"
)

func init() {
    beego.Router("/user/add/", &controllers.UserController{},"get:UserAdd")
    beego.Router("/user/delete/", &controllers.UserController{},"get:UserDelete")
    beego.Router("/user/edit/", &controllers.UserController{},"get:UserEdit")
    beego.Router("/user/select/", &controllers.UserController{},"get:UserSelect")
}
1
2
3
4
5
6
7
8
9
10
11
12
上次更新: 2024/3/13 15:35:10
01.GORM入门
03.GORM查询

← 01.GORM入门 03.GORM查询→

最近更新
01
04.数组双指针排序_子数组
03-25
02
08.动态规划
03-25
03
06.回溯算法
03-25
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式