示例以下是一个完整的Gorm模型定义示例:package modelsimport ( "gorm.io/gorm")type User struct { gorm.Model Name...string `gorm:"uniqueIndex"` Age int `gorm:"index"` Gender string `gorm:"size:...Article `gorm:"foreignKey:ArticleID"`}type Category struct { gorm.Model Name string `gorm...和Category,以及一个Role模型,用于演示BelongsTo、HasOne、HasMany和ManyToMany关系的使用。...其中,User模型与Article模型使用了HasMany关系,Article模型与Comment模型使用了HasMany关系,Article模型与Category模型使用了ManyToMany关系,User
标签说明除了上述的BelongsTo、HasOne、HasMany和ManyToMany标签外,Gorm还提供了其他标签,用于进一步细化模型之间的关系。...autoCreateTime: 自动创建记录的时间戳。autoUpdateTime: 自动更新记录的时间戳。...下面是一些标签示例:type User struct { gorm.Model Name string `gorm:"uniqueIndex"` Age...`gorm:"autoCreateTime"` UpdatedAt time.Time `gorm:"autoUpdateTime"` DeletedAt *time.Time `gorm...:"index"`}在上述代码中,我们为User模型中的各个字段添加了不同的标签,以实现不同的功能。
我们可以使用以下代码来定义User模型的HasMany关系:type User struct { gorm.Model Name string Articles []Article...最后,我们通过将Article模型中的User字段与User模型的ID字段相关联,将两个模型关联起来。ManyToManyManyToMany标签用于定义多对多关系的关联表。...我们可以使用以下代码来定义User模型的ManyToMany关系:type User struct { gorm.Model Name string Roles []Role `...gorm:"many2many:user_roles;"`}type Role struct { gorm.Model Name string Users []User `gorm...最后,我们使用gorm:"many2many:user_roles;"标签将两个模型与一个名为“user_roles”的关联表相关联。
在Gorm中,除了定义模型字段和标签外,还可以通过定义模型关系来描述不同表之间的关联关系,以实现更加复杂的数据操作。...定义模型关系在Gorm中,可以使用下列标签来定义模型关系:BelongsTo: 定义一对一或一对多关系的“从属”模型。HasOne: 定义一对一关系的“拥有”模型。...HasMany: 定义一对多关系的“拥有”模型。ManyToMany: 定义多对多关系的关联表。接下来,我们将介绍每个标签的具体用法。...我们可以使用以下代码来定义User模型的从属关系:type User struct { gorm.Model Name string TeamID uint Team...我们可以使用以下代码来定义User模型的HasOne关系:type User struct { gorm.Model Name string Profile Profile}type
Go gorm是时候升级新版本了 2.0新特性介绍(1) |Go主题月_王中阳的博客-CSDN博客_go2.0 Go GORM是时候升级新版本了 2.0新特性介绍(2)_王中阳的博客-CSDN博客_gorm...升级 第二期Go开源说实录:GORM 剖析与最佳实践_Go中国-CSDN博客 gorm升级V1至V2_CarlosKeFeng的博客-CSDN博客_gorm v2 我用beego 2.0 1....旧版连接数据库 _db, err = gorm.Open(db_type, dns) 2.0之后的连接数据库,放models下第一个文件的init里 _db, err = gorm.Open(sqlite.Open...:"-"` // hasMany 不加 gorm:"-"这个就会提示错误了。...;references:当前表的结构体字段;` 当belongs to 的时候,正好相反 `gorm:"foreignKey:当前表的结构体字段;references:关联表的结构体字段;`
序 本文主要研究一下gorm的DeletedAt advance-gorm-3-638.jpg DeletedAt gorm.io/gorm@v1.20.10/soft_delete.go type...DeleteClauses方法使用的是SoftDeleteDeleteClause SoftDeleteQueryClause gorm.io/gorm@v1.20.10/soft_delete.go...方法会追加DeletedAt为nil的查询条件 SoftDeleteDeleteClause gorm.io/gorm@v1.20.10/soft_delete.go type SoftDeleteDeleteClause...方法会回调这些interface的对应方法 小结 gorm的DeletedAt为sql.NullTime类型,它定义了QueryClauses方法,使用的是SoftDeleteQueryClause...doc gorm
序 本文主要研究一下gorm的DeletedAt DeletedAt gorm.io/gorm@v1.20.10/soft_delete.go type DeletedAt sql.NullTime...DeleteClauses方法使用的是SoftDeleteDeleteClause SoftDeleteQueryClause gorm.io/gorm@v1.20.10/soft_delete.go...方法会追加DeletedAt为nil的查询条件 SoftDeleteDeleteClause gorm.io/gorm@v1.20.10/soft_delete.go type SoftDeleteDeleteClause...方法会回调这些interface的对应方法 小结 gorm的DeletedAt为sql.NullTime类型,它定义了QueryClauses方法,使用的是SoftDeleteQueryClause,它的...doc gorm
序 本文主要研究一下gorm的logger OIP - 2021-01-10T234039.816.jpeg logger gorm.io/gorm@v1.20.10/logger/logger.go...、Info、Warn、Error、Trace方法 Session.Logger gorm.io/gorm@v1.20.10/gorm.go type Session struct { DryRun...c.processor.callbacks = append(c.processor.callbacks, c) return c.processor.compile() } callback的Remove...的logger提供了Interface接口,可以自己实现并全局设置或者在session级别设置;gorm默认的logger实现了logger.Interface接口定义的LogMode、Info、Warn...doc gorm
序 本文主要研究一下gorm的logger logger gorm.io/gorm@v1.20.10/logger/logger.go type logger struct { Writer...、Info、Warn、Error、Trace方法 Session.Logger gorm.io/gorm@v1.20.10/gorm.go type Session struct { DryRun...c.processor.callbacks = append(c.processor.callbacks, c) return c.processor.compile() } callback的Remove...的logger提供了Interface接口,可以自己实现并全局设置或者在session级别设置;gorm默认的logger实现了logger.Interface接口定义的LogMode、Info、Warn...doc gorm
序 本文主要研究一下gorm的Transaction Transaction gorm.io/gorm@v1.20.10/finisher_api.go // Transaction start a transaction...方法针对非TxCommitter类型的db.Statement.ConnPool执行db.Begin,之后注册defer针对panicked或者err的执行tx.Rollback(),执行fc之后,判断...= nil { t.Error(err) } } 小结 gorm的DB提供了Transaction方法,相当于一个事务模板,自动commit或者rollback,它提供了func...(tx *gorm.DB) error参数用于自定义事务内的数据库操作。...doc gorm
序 本文主要研究一下gorm的Unscoped OIP - 2021-01-15T231557.840.jpeg Unscoped gorm.io/gorm@v1.20.11/chainable_api.go...方法在db.Statement.Unscoped为false的时候才追加db.Statement.Schema.DeleteClauses DeleteClauses gorm.io/gorm@v1.20.11...= nil { panic(err) } } 小结 gorm的Unscoped方法设置tx.Statement.Unscoped为true;针对软删除会追加SoftDeleteDeleteClause...,即设置deleted_at为指定的时间戳;而callbacks的Delete方法在db.Statement.Unscoped为false的时候才追加db.Statement.Schema.DeleteClauses...,而Unscoped则执行的是物理删除。
序 本文主要研究一下gorm的OnConflict u=1258358460,1662352287&fm=26&gp=0.jpg OnConflict gorm.io/gorm@v1.20.11/clause...Column{Name: value}, Value: Column{Table: "excluded", Name: value}} } return assignments } 的DoUpdates...属性是Set类型,Set类型实际是Assignment数组;其Build方法会组装assignment的sql 实例 func onConflictDemo(db *gorm.DB) { entities...的OnConflict定义了Columns、Where、OnConstraint、DoNothing、DoUpdates、UpdateAll属性;Build方法会根据这些属性拼装sql,如果是DoNothing...doc gorm
序 本文主要研究一下gorm的IsolationLevel IsolationLevel /usr/local/go/src/database/sql/sql.go // IsolationLevel...的Transaction方法提供了*sql.TxOptions参数,可以用于设置Isolation,它最后传递给具体的driver BeginTx github.com/go-sql-driver/mysql...、LevelRepeatableRead、LevelSnapshot、LevelSerializable、LevelLinearizable;gorm的Transaction方法提供了*sql.TxOptions...参数,可以用于设置Isolation,它最后传递给具体的driver;BeginTx会判断若指定的隔离级别不是default则会执行mapIsolationLevel映射到mysql支持的隔离级别,然后执行...doc gorm
序 本文主要研究一下gorm的Transaction u=836865041,2825096190&fm=26&gp=0.jpg Transaction gorm.io/gorm@v1.20.10/...方法针对非TxCommitter类型的db.Statement.ConnPool执行db.Begin,之后注册defer针对panicked或者err的执行tx.Rollback(),执行fc之后,判断...= nil { t.Error(err) } } 小结 gorm的DB提供了Transaction方法,相当于一个事务模板,自动commit或者rollback,它提供了func...(tx *gorm.DB) error参数用于自定义事务内的数据库操作。...doc gorm
序 本文主要研究一下gorm的IsolationLevel zbiz2beo07ccmj1cuyqd.png IsolationLevel /usr/local/go/src/database/sql...的Transaction方法提供了*sql.TxOptions参数,可以用于设置Isolation,它最后传递给具体的driver BeginTx github.com/go-sql-driver/...、LevelRepeatableRead、LevelSnapshot、LevelSerializable、LevelLinearizable;gorm的Transaction方法提供了*sql.TxOptions...参数,可以用于设置Isolation,它最后传递给具体的driver;BeginTx会判断若指定的隔离级别不是default则会执行mapIsolationLevel映射到mysql支持的隔离级别,然后执行...doc gorm
序 本文主要研究一下gorm的prometheus u=3843080822,546178080&fm=26&gp=0.jpg Plugin gorm.io/gorm@v1.20.10/interfaces.go.../gorm@v1.20.10/gorm.go func (db *DB) Use(plugin Plugin) (err error) { name := plugin.Name() if...的Use方法用于启动一个plugin,它会执行plugin.Initialize(db) 实例 db.Use(prometheus.New(prometheus.Config{...的Plugin接口定义了Name、Initialize方法;gorm的Use方法用于启动一个plugin,它会执行plugin.Initialize(db);Prometheus实现了Plugin接口定义了...doc gorm
序 本文主要研究一下gorm的OnConflict OnConflict gorm.io/gorm@v1.20.11/clause/on_conflict.go type OnConflict struct...Column{Name: value}, Value: Column{Table: "excluded", Name: value}} } return assignments } 的DoUpdates...属性是Set类型,Set类型实际是Assignment数组;其Build方法会组装assignment的sql 实例 func onConflictDemo(db *gorm.DB) { entities...的OnConflict定义了Columns、Where、OnConstraint、DoNothing、DoUpdates、UpdateAll属性;Build方法会根据这些属性拼装sql,如果是DoNothing...doc gorm
序 本文主要研究一下gorm的GroupBy OIP - 2021-01-19T235758.765.jpeg GroupBy gorm.io/gorm@v1.20.11/clause/group_by.go...checkBuildClauses(t, result.Clauses, result.Result, result.Vars) }) } } 小结 gorm...的GroupBy定义了Columns和Having属性,其Build方法遍历Columns,最后针对Having在拼接Having子句。...doc gorm
在实际的工程和产品开发中,我们需要更新产品的程序,这时候就需要产品具备bootloader引导程序功能,而嵌入式中常用的接口有基于UART,CAN,IIC,SPI, 以太网等,今天我们来看看使用广泛的基于...CAN的bootloader在NXP汽车控制器S9KEAZ系列上的移植。...但是这个比较简单,实际的工业产品还要加一些自己的东西。...将合成后的文件下载到自己的硬件板件,准备几个不同的应用程序bin文件,来测试我们移植好的bootloader,测试上位机使用tera term,tera term是免费开源的虚拟终端,支持网口和串口,且内置很多协议...等待下载完成,根据自己应用程序的需求测试看是否通过,我自己使用的两个测试bin文件会输出不同的CAN消息,且操作不同的继电器。我们也可以将J1939程序加入,完成基于J1939的bootloader。
序 本文主要研究一下gorm的prometheus Plugin gorm.io/gorm@v1.20.10/interfaces.go // Plugin GORM plugin interface.../gorm@v1.20.10/gorm.go func (db *DB) Use(plugin Plugin) (err error) { name := plugin.Name() if...的Use方法用于启动一个plugin,它会执行plugin.Initialize(db) 实例 db.Use(prometheus.New(prometheus.Config{...的Plugin接口定义了Name、Initialize方法;gorm的Use方法用于启动一个plugin,它会执行plugin.Initialize(db);Prometheus实现了Plugin接口定义了...doc gorm
领取专属 10元无门槛券
手把手带您无忧上云