gorm模型定义

一、模型定义的作用
用作数据库数据转换和自动建表

二、模型名和表名的映射关系
规则
第一个大写字母变为小写,
遇到其他大写字母变为小写并且在前面加下划线,
连着的几个大写字母,只有第一个遵循上面的两条规则,其他的大写字母转为小写,不加下划线,遇到小写,前面的第一个大写字母变小写并加下划线
复数形式

举例
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 "新的表名"
}
 // 在默认表名上加其他规则
    gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {
		return "sys_" + defaultTableName
	}
	db.AutoMigrate(models.User{},models.GormModel{})

四、结构体字段名和列名的对应规则
规则 * 列名是字段名的蛇形小写
举例
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"

一、一对一

 // UserProfile属于User,外键是在UserProfile模型,外键字段为:UId


     type User struct {
        Id int
        Name string
        Age int
        Addr string

    }


    type UserProfile struct {
        Id int
        Pic string
        CPic string
        Phone string
        User User `gorm:"ForeignKey:UId;AssociationForeignKey:Id"`  // 关联关系
        //UserID int  // 默认关联字段为Id
        UId int // uid
    }

    注:

    // 外键默认使用UserID,如果不指定外键,则使用默认的外键字段,
    // 默认关联ID,通过AssociationForeignKey指定关联字段

2.包含

// UserProfile 包含一个 User, 外键在User模型,外键字段为:PId

    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
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值