当前位置:网站首页>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
} 


一对一操作
边栏推荐
猜你喜欢

2021电赛F题openmv和K210调用openmv api巡线,完全开源。

"Open math input panel" in MathType editing in win11 is gray and cannot be edited

Principes de formation de la programmation robotique

TCP三次握手为什么不是两次或四次

【qt5-tab标签精讲】Tab标签及内容分层解析

Dls-42/6-4 dc110v double position relay

Docker deployment MySQL 8

For the first time in more than 20 years! CVPR best student thesis awarded to Chinese college students!

DLS-20型双位置继电器 220VDC

图的连通性基础
随机推荐
Use of typora
JS to convert numbers into Chinese characters for output
1175. Prime Arrangements
冲击继电器ZC-23/DC220V
User defined annotation implementation verification
Visual studio 2019 Download
How to do the performance pressure test of "Health Code"
Exploring the road of steam education innovation in the Internet Era
Two position relay st2-2l/ac220v
Open3D 点云包围盒
染色法判断二分图
个人博客搭建与美化
使用StrictMode-StrictMode原理(1)
Listview in flutter application development
dc_labs--lab1的学习与总结
系统设置大页
Impact relay zc-23/dc220v
小程序自定义宫格
[network packet loss and network delay? This artifact can help you deal with everything!]
Pre training / transfer learning of models