手把手带你写一个 Web 框架
叶剑峰
腾讯高级工程师,前滴滴技术专家
22731 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
特别放送 (1讲)
手把手带你写一个 Web 框架
15
15
1.0x
00:00/00:00
登录|注册

26|GORM(下):数据库的使用必不可少

Delete
Query
Update
Insert
AutoMigrate()
初始化orm.DB
OrmLogger
GetBaseConfig()
NewHadeGorm()
Name()
Params()
IsDefer()
Boot()
Register()
GetDB(option ...DBOption)
FormatDsn()
DSN
DemoOrm
HadeGorm
GormProvider
DBOption
ORMService
DBOption
DBConfig
测试
服务实例化
服务提供者
服务接口
数据库连接
GORM
GORM集成到Hade框架

该思维导图由 AI 生成,仅供参考

你好,我是轩脉刃。
上一节课,我们梳理了 Gorm 的核心逻辑,也通过思维导图,详细分析了 Gorm 的源码搞清楚它是如何封装 database/sql 的。这节课我们就要思考和操作,如何将 Gorm 融合进入 hade 框架了。
Gorm 的使用分为两个部分,数据库的连接和数据库的操作。
对于数据库操作接口的封装,Gorm 已经做的非常好了,它在 gorm.DB 中定义了非常多的对数据库的操作接口,这些接口已经是非常易用了,而且每个操作接口在官方文档中都有对应的说明和使用教程。比如在 DB 的操作接口列表中,我们可以看到常用的增删改查的逻辑:
func (db *DB) Create(value interface{}) (tx *DB)
func (db *DB) Delete(value interface{}, conds ...interface{}) (tx *DB)
func (db *DB) Get(key string) (interface{}, bool)
func (db *DB) Update(column string, value interface{}) (tx *DB)
同时,官方首页的例子也把获取到 DB 后的增删改查操作显示很清楚了,建议你在浏览器收藏这个 Gorm 的说明文档,因为在具体的应用开发中,你会经常参考使用它的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了如何将Gorm集成到hade框架中,重点讲解了ORM服务的定义、服务接口、服务提供者和服务实例化。通过定义ORM服务接口,将Gorm封装为一个服务,包括服务接口、服务提供者和服务实例化。文章还讨论了数据库配置的设计和日志输出的实现。通过对Gorm的封装和服务化,使得数据库操作更加便捷和灵活。作者还提供了测试示例,展示了如何在应用中使用Gorm进行数据库操作。总的来说,本文通过深入的技术讲解和实际示例,为读者提供了深入理解Gorm集成到hade框架的思路和方法。文章还提出了关于ORM框架中model层存放位置的思考题,引发读者对该话题的思考和讨论。文章内容丰富,适合对Gorm集成和ORM框架感兴趣的读者阅读学习。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一个 Web 框架》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • 功夫熊猫
    我都是直接靠Raw直接写sql语句的。因为有时候不太好定义模型

    作者回复: 还是orm之争,哈,看来老哥属于极客型

    2021-11-19
    2
  • 宁建峰
    api_orm.go中,以下代码gin1.8.1已经过过限制了,999<code>100,所以这里使用50001,会发生panic:invalid WriteHeader code 50001 if err != nil { logger.Error(c, err.Error(), nil) c.AbortWithError(50001, err) return } gin v1.8.1 源码如下: func checkWriteHeaderCode(code int) { // Issue 22880: require valid WriteHeader status codes. // For now we only enforce that it's three digits. // In the future we might block things over 599 (600 and above aren't defined // at https://httpwg.org/specs/rfc7231.html#status.codes) // and we might block under 200 (once we have more mature 1xx support). // But for now any three digits. // // We used to send "HTTP/1.1 000 0" on the wire in responses but there's // no equivalent bogus thing we can realistically send in HTTP/2, // so we'll consistently panic instead and help people find their bugs // early. (We can't return an error from WriteHeader even if we wanted to.) if code < 100 || code > 999 { panic(fmt.Sprintf("invalid WriteHeader code %v", code)) } }
    2022-08-24归属地:北京
    3
  • 老兵
    不知道是不是我理解不对,感觉目前gorm在数据库字段的迁移的方案还是不行。比如数据库表加一个字段,删除一个字段,用auto-migrate还是无法做到精准像active_record那样的方便吧? 不知道叶老师是否有一些golang下orm+migration的经验?
    2022-01-12
  • 无笔秀才
    我觉得除了orm 还应该支持直接sql,毕竟很多人不喜欢用orm
    2022-01-11
    1
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部