当前位置:网站首页>gin_gorm
gin_gorm
2022-07-01 00:41:00 【weixin_38107457】
一、使用形式
1、引入gorm包
import "github.com/jinzhu/gorm"2、导入数据库驱动
import _ "github.com/go-sql-driver/mysql"
为了方便记住导入路径,GORM包装了一些驱动:
import _ "github.com/jinzhu/gorm/dialects/mysql"
// import _ "github.com/jinzhu/gorm/dialects/postgres"
// import _ "github.com/jinzhu/gorm/dialects/sqlite"
// import _ "github.com/jinzhu/gorm/dialects/mssql"
所以可以用以下两种形式来使用mysql:
1、
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
2、
import (
"github.com/jinzhu/gorm"
_ "github.com/go-sql-driver/mysql"
)
3、连接数据库
// 连接数据库
用户名:密码@tcp(ip:port)/数据库?charset=utf8&parseTime=True&loc=Local
db, err := gorm.Open("mysql", "root:[email protected](localhost:3306)/go_project?charset=utf8&parseTime=True&loc=Local")
if err != nil {
panic(err)
}
defer db.Close() // 关闭空闲的连接4.DDL操作
type User struct {
Id int
Name string
Age int
}
// 创建表
db.Table("user").CreateTable(&User{}) // 指定表名
db.CreateTable(&User{}) // 不指定表名,模型后面会加个sDML操作
// 1. 增
//db.Create(&models.User{Name: "李四", Age: 18, Addr: "xxx", Pic: "/static/upload/pic.png", Phone: "123456789"})
//查询
var user models.User
//db.First(&user, 1) // 默认id
//db.First(&user, "name=?", "张三") // // 指定字段
//fmt.Println(user)
// 更新
//db.First(&user, 1)
//db.Model(&user).Update("age", 22)
//db.Model(&user).Update("addr", "zs-xxxx")
// 删除
db.First(&user, 2)
db.Delete(&user)模型定义
用作数据库数据转换和自动建表
模型名和表名的映射关系
- 规则
- 第一个大写字母变为小写,
- 遇到其他大写字母变为小写并且在前面加下划线,
- 连着的几个大写字母,只有第一个遵循上面的两条规则,其他的大写字母转为小写,不加下划线,遇到小写,前面的第一个大写字母变小写并加下划线
- 复数形式
- 举例
- User --> users 首字母小写,复数
- UserInfo --> user_infos
- DBUserInfo --> db_user_infos
- DBXXXXUserInfo --> dbxxxx_user_infos
在默认表名上加其他规则
// 在默认表名前加sys_前缀
gorm.DefaultTableNameHandler = func (db *gorm.DB, defaultTableName string) string {
return "sys_" + defaultTableName;
}
自定义表名:
func (模型) TableName() string{
return "新的表名"
}
package models
import "github.com/jinzhu/gorm"
type GormModel struct {
gorm.Model
Name string
}
func (GormModel) TableName() string {
return "test_gorm_model"
}结构体字段名和列名的对应规则
- 规则 * 列名是字段名的蛇形小写
- 举例
- Name --> name
- CreatedTime --> create_time
- 可以通过gorm标签指定列名,AnimalId int64 `gorm:"column:beast_id"`
gorm.Model
基本模型定义gorm.Model,包括字段ID,CreatedAt,UpdatedAt,DeletedAt
只需要在自己的模型中指定gorm.Model匿名字段,即可使用上面的四个字段
// 添加字段 `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt`
type User struct {
gorm.Model
Name string
}ID:主键自增长
CreatedAt:用于存储记录的创建时间
UpdatedAt:用于存储记录的修改时间
DeletedAt:用于存储记录的删除时间
结构体标签gorm的使用
type UserInfo struct {
Id int `gorm:"primary_key"`
Name string `gorm:"index"`
Age int
}gorm标签属性值
- -: 忽略,不映射这个字段 `gorm:"-"`
- primary_key:主键 `gorm:"primary_key"`
- AUTO_INCREMENT:自增 `gorm:"AUTO_INCREMENT"`
- not null:不为空,默认为空 `gorm:"not null"`
- index:索引, `gorm:"index"`
- 创建索引并命名: `gorm:"index:idx_name_code"`
- 优化查询,相当于图书的目录
unique_index:唯一索引 `gorm:"unique_index"`
unique:唯一 `gorm:"unique"`
column:指定列名 `gorm:"column:user_name"`
size:字符串长度,默认为255 `gorm:"size:64"`
- type:设置sql类型 `gorm:"type:varchar(100)"` // 不推荐直接改类型
- default `default:'galeone'` 默认值
多个属性值之间用分号分隔(英文的;):`gorm:"size:64;not null"`
一对一
package relate_tables
// 一对一
type User struct {
Id int
Name string
Age int
Addr string
}
type UserProfile struct {
Id int
Pic string
CPic string
Phone string
User User // 关联关系
UserID int
}


// 一对一
// 属于
type User struct {
Id int
Name string
Age int
Addr string
}
type UserProfile struct {
Id int
Pic string
CPic string
Phone string
//User User // 关联关系
User User `gorm:"ForeignKey:UId;AssociationForeignKey:Id"` // 关联关系
//UserID int // 默认关联字段
UId int //uid
}

包含
// 包含
type User struct {
Id int
Name string
Age int
Addr string
PId int
}
type UserProfile struct {
Id int
Pic string
CPic string
Phone string
User User `gorm:"ForeignKey:PId;AssociationForeignKey:Id"` // 关联关系
}

一对多
// 一对多
type User2 struct {
Id int
Name string
Age int
Addr string
Articles []Article `gorm:"ForeignKey:UId;AssociationForeignKey:Id"`
}
type Article struct {
Id int
Title string
Content string
Desc string
// 外键
UId int
}


多对多
type Article2 struct {
AId int `gorm:"primary_key:true"`
Title string
Content string
Desc string
Tags []Tag `gorm:"many2many:Article2s2Tags"` // ;ForeignKey:AId;AssociationForeignKey:TId
}
type Tag struct {
TId int `gorm:"primary_key:true"`
Name string
Desc string
} 


一对一操作
边栏推荐
- Visual studio 2019 shortcut notes
- How to do the performance pressure test of "Health Code"
- Interpreting the scientific and technological literacy contained in maker Education
- 基础知识之一——STA基础概述
- ORB-SLAM2源码学习(二)地图初始化
- Dls-20 double position relay 220VDC
- Installing mongodb database in Windows Environment
- 【go】go 实现行专列 将集合进行转列
- Digital IC design process summary
- StrictMode分析Activity泄漏-StrictMode原理(3)
猜你喜欢
随机推荐
Looksrare team's "cash out" caused disturbance
dc_labs--lab1的学习与总结
冲击继电器ZC-23/DC220V
文件服务设计
[问题已处理]-nvidia-smi命令获取不到自身容器的GPU进程和外部的GPU进程号
图的连通性基础
(学习力+思考力) x 行动力,技术人成长的飞轮效应总结
关于VCTK数据集
Docker 部署 MySQL 8
基础知识之一——STA基础概述
用Steam教育启发学生多元化思维
Split the linked list [take next first and then cut the linked list to prevent chain breakage]
K210 site helmet
StrictMode分析Activity泄漏-StrictMode原理(3)
JS to convert numbers into Chinese characters for output
User defined annotation implementation verification
流批一体在京东的探索与实践
06. on several ways of redis persistence
[leetcode] sum of two numbers [1]
1175. Prime Arrangements









