Skip to content

wxy2077/gorm-example

Repository files navigation

GORM 基础使用例子

前因:之前在V2EX,看到一篇帖子,https://www.v2ex.com/t/859178 ,是来吐槽go的ORM框架 gorm 难用,然后帖子讨论后期就跑偏了。 但是我现在用了GORM有一段时间了,感觉也没那么难用,只是感觉GORM文档的例子,太简洁了,不够全,导致很多人用起来很不顺手,所以我想 把我使用的例子分享出来,给大家参考。

演示功能

  • model的tag编写格式。
  • 数据库迁移以及维护,主要使用sql-migrate,具体使用见这里
  • 常见查询分页,以及规范建议。见这里
  • 基础配置文件加载。
  • Jaeger链路追踪,显示SQL操作顺序,以及请求参数和响应参数。

项目结构设计

结构设计建议

一般Web项目,比如Java会分为三层。

DAO层:
    DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,
    也就是说某个DAO一定是和数据库的某一种表一一对应的,其中封装了增删改查基本操作,建议DAO只做原子操作,增删改查
    
Service层:
    Service层叫服务层,被称为服务,粗略的理解就是对一个或多个DAO进行的再次封装,封装成一个服务,所以这里也就不会是一个原子操作了,需要事务控制

Controller层:
    Controller负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面。
    controller层一般会和前台的js文件进行数据的交互, controller层是前台数据的接收器,后台处理好的数据也是通过controller层传递到前台显示的。

在此演示项目中

DAO层 对应 Model层

Service层 对应 Logic层(我认为叫逻辑层更合理,在这层组装各种业务逻辑)

Controller层 可以自行根据web框架在对应路由操作下添加。

操作体验

特别是Preload,刚开始接触时,特别不理解这个方法,直接实际上数据更好理解。 我在02_migrate/mysql/20220626_init.sql文件里面,加入一些insert语句,方便各种GORM操作直观的体现数据查询结果。

  • 1 安装环境,迁移生成表

配置 config/config.yaml信息(.yaml结尾的配置文件一般都会设置git忽略,不上传 只留下一个.yaml.example格式例子文件)。并且在数据库创建名为example的数据库

go mod tidy

迁移见sql-migrate

  • 2 启动
# 项目根目录下
go run main.go

建议浏览器安装JSON-handle查看,查看接口JSON结果更方便。

预加载查询结果展示

  • 3 Jaeger链路追踪
# 需要docker安装Jaeger

docker run -d --name jaeger \
  -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
  -p 5775:5775/udp \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 14268:14268 \
  -p 14250:14250 \
  -p 9411:9411 \
  jaegertracing/all-in-one:1.22
  

装好后访问,用接口响应中的traceID查询请求。

方便追踪请求,效果图如下 Jaeger效果图

About

go语言gorm框架基本使用介绍

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages