当前位置: 首页 > news >正文

gorm简介

【1】ORM:
即Object-Relational Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它们就可以了。

【2】GORM
gorm是go语言的一个orm框架,Golang写的,开发人员友好的ORM库。

【3】中文文档:
https://gorm.io/zh_CN/docs/

【4】安装GORM:
录入安装GORM的命令

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql


案列:
【1】创建一个数据库:testgorm

package mainimport ("fmt""gorm.io/driver/mysql" //引入mysql驱动"gorm.io/gorm"
)func main() {//连接数据库://参数:指的是数据库的设置信息:用户名:密码@tcp(ip:port)/数据库名字?charset=utf8&parseTime=True&loc=Local//charset=utf8设置字符集//parseTime=True为了处理time.Time//loc=Local时区设置,与本地时区保持一致dsn := "root:root@tcp(127.0.0.1:3306)/testgorm?charset=utf8&parseTime=True&loc=Local"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {panic(err) //如果出错,后续代码没有必要执行,想让程序中断,panic来执行即可}//创建表方式一:通常情况下,数据库中新建的表的名字是结构体名字的复数形式,例如结构体User,表名usersif err := db.AutoMigrate(&User{}); err != nil {panic(err)}//创建表方式二:Table方法可以指定你要创建的数据库的表名if err := db.Table("user").AutoMigrate(&User{}); err != nil {panic(err)}//删除表if !db.Migrator().HasTable(&User{}) {fmt.Println("table does not exist")} else {if err := db.Migrator().DropTable(&User{}); err != nil {panic(err)}}}// 定义结构体
type User struct {Age  intName string
}

【2】表名自定义规则

//【1】模型名称和表名的映射规则:
//1、如果模型名没有驼峰命名,那么表名就是:模型名小写+复数形式:如模型名User---》表名users
//2、如果模型名有驼峰命名,那么表名就是:大写变小写并在前面加下划线,最后加复数形式:如模型名UserInfo---》表名user_infos
//3、如果模型名有连续的大写字母,那么表名就是:连续的大写字母变小写,驼峰前加下划线,字母变小写,最后加复数形式:如模型名:DBUserInfo---》表名db_user_infos
type User struct {Age  intName string
}type MyUser struct {Age  intName string
}//自定义表名
func (MyUser) TableName() string {return "test_my_user"
}

【3】gorm.Model匿名字段

只需要再自己的模型中指定gorm.Model匿名字段,即可在数据库表中包含四个字段:ID,CreatedAt,UpdatedAt,DeletedAt
ID:主键自增长
CreatedAt:用于存储记录的创建时间
UpdatedAt:用于存储记录的修改时间
DeletedAt:用于存储记录的删除时间
代码:

type MyUser2 struct {gorm.ModelAge  intName string
}

【4】通过结构体标签gorm来实现表的约束 

(1)-: 忽略,不映射这个字段 eg:gorm:"”,适合:一些冗余字段,不想在数据库中体现,只想在结构体中体现

(2)primary key:主键eg:gorm:"primary key
(3)AUTO INCREMENT:自增 eg:`gorm:"AUTO INCREMENT"

(4)not null:不为空,默认为空 eg:gorm:"not null"
(5)index:索引,eg:gorm:"index"
创建索引并命名:eg:gorm:"index:idx name_code"

(6)unique index:唯一索引 eg:`gorm:"unique index"唯一性索引unique index和一般索引normal index最大的差异就是在索引列上增加了一层唯一约束。添加唯一性索引的数据列可以为空,但是只要存在数据值,就必须是唯一的。

(7)unique:唯-eg:gorm:"unique"

(8)column:指定列名eg:`gorm:"column:user name

(9)size:字符串长度,默认为255 eg:gorm:"size:10"`
(10)default`default:'男”默认值
(11)type:设置sql类型 eg:gorm:"type:int(2)"
PS:多个属性值之间用分号分隔

代码:

type Student struct {StuID   int    `gorm:"primary_key;AUTO_INCREMENT"`Name    string `gorm:"not null"`Age     int    `gorm:"unique_index"` //`gorm:"index:name_index"`Email   string `gorm:"unique"`Sex     string `gorm:"column:gender;size:10"`Desc    string `gorm:"-"`Classno string `gorm:"type:int"`
}

http://www.lryc.cn/news/378224.html

相关文章:

  • MySQL:SELECT list is not in GROUP BY clause 报错 解决方案
  • IPython的使用技巧
  • Spring Boot 多线程例子
  • java干货 线程池的分析和使用
  • 文本张量入门
  • js文字如何轮播?
  • Linux 五种IO模型
  • 深度解析响应式异步编程模型
  • 一个软件是如何开发出来的呢?
  • 宝塔板面有哪些优势
  • Mybatis中BaseEntity作用
  • IDEA2023中使用run Dashboard面板?实现批量运行微服务
  • 分数受限,鱼和熊掌如何兼得?专业or学校,这样选最明智!
  • CentOS 8.5 - 配置ssh的免密登录
  • 反转链表(java精简版)
  • QPair使用详解
  • C# 语言在AGI 赛道上能做什么
  • 微信小程序-API 本地存储
  • TensorFlow音频分类修复
  • C#学习系列之ListView垂直滚动
  • MySQL 常用函数总结
  • SpingBoot快速入门下
  • 什么是symbol?
  • Tailwind CSS 响应式设计实战指南
  • 如何把模糊的图片修复变清晰,怎么做?有那些方法?
  • 思科路由器密码恢复方法
  • HTML某联招聘
  • 第一百一十六节 Java 面向对象设计 - Java 终止块
  • YOLOv10改进 | 注意力篇 | YOLOv10引入YOLO-Face提出的SEAM注意力机制优化物体遮挡检测
  • 问题解决:Problem exceeding maximum token in azure openai (with java)