今天更新的有点晚!大清早就被拉起来改bug!给大家写点示例,避免采坑!希望大家都有一个愉快的周末! 大家在开发的过程经常面对“谁属于谁”的问题,例如:你的女朋友属于你。...那么你怎么知道你的女朋友属于你呢?首先要在女朋友哪里打个标识属于你,那么就可以通过你找到你的朋友了。有的小伙伴比较悲催,需要手动在女朋友哪里打个标识,那么找到你再找你女票的话就需要指定标识。 ?...那么我们gorm中怎么建立这种属于关系呢?又是怎么表示的呢?为了照顾有些小伙伴的情绪,我们一用户和邮箱、用户和手机号为例。...Model Address string `json:"address"` User User `json:"user" gorm:"foreignkey:UserReferId...//例如 这里我们知道了邮箱,编辑邮箱信息的时候可以直接更新用户信息,只需要赋值就好,gorm会自动帮我们处理 user.Name = "hanyun" user.Age = 31 mobile.User
请问老师,您书中列举的4个工作流没有包含测试,测试是不是不属于建模范围 UMLChina潘加宇 “测试”可以看作建模的验证过程,思考的还是那些内容,类似下面这张流行很广的图。...当然,图上所用的术语统一为书中的术语就更好。 ? 所以不能光说“做测试”,也要清楚认识“测试”时的思考焦点。 如果“测试”的是组织流程中各个系统之间的协作,那就是业务建模。...如果“测试”的是目标系统的整体行为?那就是需求 如果“测试”的是系统内部各个组成部分之间的协作,那就是分析(核心域)和设计(非核心域)。...现在随着迭代周期的缩短,启发和验证的交替越来越快,测试的技能可以成为建模技能的一部分,帮助得到高质量模型。
序 本文主要研究一下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的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的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的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的IsolationLevel IsolationLevel /usr/local/go/src/database/sql/sql.go // IsolationLevel...nil { return nil, err } } return mc.begin(opts.ReadOnly) } BeginTx会判断若指定的隔离级别不是...、LevelRepeatableRead、LevelSnapshot、LevelSerializable、LevelLinearizable;gorm的Transaction方法提供了*sql.TxOptions...参数,可以用于设置Isolation,它最后传递给具体的driver;BeginTx会判断若指定的隔离级别不是default则会执行mapIsolationLevel映射到mysql支持的隔离级别,然后执行...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的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的Locking OIP - 2021-01-18T234935.279.jpeg Locking gorm.io/gorm@v1.20.11/clause/locking.go...doc gorm
序 本文主要研究一下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
序 本文主要研究一下gorm的CreateInBatches CreateInBatches gorm.io/gorm@v1.20.11/finisher_api.go // CreateInBatches...其rowsAffected是每个批次的rowsAffected的累加 AddError gorm.io/gorm@v1.20.11/gorm.go // AddError add error to db...的CreateInBatches允许用户自定义batchSize,它会根据batchSize来分配进行create,但是他们是在同一个事务的,其rowsAffected是每个批次的rowsAffected...的累加。...doc gorm
序 本文主要研究一下gorm的Locking Locking gorm.io/gorm@v1.20.11/clause/locking.go type Locking struct { Strength...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的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的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的IsolationLevel zbiz2beo07ccmj1cuyqd.png IsolationLevel /usr/local/go/src/database/sql...nil { return nil, err } } return mc.begin(opts.ReadOnly) } BeginTx会判断若指定的隔离级别不是...、LevelRepeatableRead、LevelSnapshot、LevelSerializable、LevelLinearizable;gorm的Transaction方法提供了*sql.TxOptions...参数,可以用于设置Isolation,它最后传递给具体的driver;BeginTx会判断若指定的隔离级别不是default则会执行mapIsolationLevel映射到mysql支持的隔离级别,然后执行...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
今天咱们一起来学习下gorm中的几个核心数据结构。通过了解gorm底层的数据结构,能够让我们了解gorm底层的实现,以便更好的使用gorm。...一、DB 在使用gorm的时候,我们首先会使用gorm.Open方法和数据库建立连接,同时并返回一个gorm.DB结构。...而如果做了对应的配置:SingularTable:True,gorm就会把该model转换成对应的m_test表名。...这也就是为什么我们在使用gorm的时候,给Find函数传一个Model类型的dest就能定位到对应的表,并将数据获取出来。...在gorm中,会通过对应名称的函数来组织对应的从句。
领取专属 10元无门槛券
手把手带您无忧上云