go 进阶 go-zero相关: 九. goctl 生成数据库与缓存逻辑

一. 基础

  1. go-zero内部提供了操作数据库,redis缓存的相关逻辑,可以通过goctl命令针对指定表生成对应的增删改查逻辑,参考博客, 参考博客,参考博客
  2. 例如将建表sql放到项目的sql文件夹下
    在这里插入图片描述
  3. 切换到user项目路径下,执行goctl命令
goctl model mysql ddl -src="./sql/*.sql" -dir="./model"  -style goZero

在这里插入图片描述

  1. 命令执行完毕后会生成对应数据库操作的文件
    在这里插入图片描述
  2. 也可以给上面的命令增加"-c"表示生成带缓存逻辑的crud
生成代码缓存的代码:
goctl model mysql ddl -src="./sql/*.sql" -dir="./model" -c -style goZero
//或者直接连接数据库,指定表生成
goctl model mysql datasource -url="root:root@tcp(127.0.0.1:3306)/demo" -table="t_user" -dir="./model" -c -style goZero
  1. 项目的yaml中增加数据库连接与redis缓存连接配置
Etcd:
  Hosts:
    - 127.0.0.1:2379
  Key: user.rpc
  
DB:
  #拼接规则: 用户名:密码@tcp(ip:端口号)/库名?......
  DataSource: root:root@tcp(localhost:3306)/demo?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai
  
Redis:
  Host: localhost:6379
  Type: node
  Pass:
    
Cache:
  - Host: localhost:6379 #缓存地址
    Pass:
  1. internal/config下config增加DB与Cache属性
type Config struct {
	rest.RestConf
	zrpc.RpcClientConf
	//数据库配置属性
	DB struct {
		DataSource string
	}
	//如果有缓存需求的话增加缓存配置属性
	Cache cache.CacheConf
}
  1. 修改internal/svc/下ServiceContext,增加表model,在业务操作时直接通过指定model进行数据库的增删改查
import (
	"github.com/zeromicro/go-zero/core/stores/sqlx"
	"github.com/zeromicro/go-zero/zrpc"
	"go_cloud_demo/rpc/types/user"
	"go_cloud_demo/rpc/userclient"
	"go_cloud_demo/user/internal/config"
	"go_cloud_demo/user/model"
)

type ServiceContext struct {
	Config config.Config
	//用来创建rpc客户端的结构体
	RpcUser userclient.User
	//访问rpc服务接口返回的数据
	UserAuthResp *user.UserAuthResp
	//指定表操作model模型
	TUserModel model.TUserModel
}

func NewServiceContext(c config.Config) *ServiceContext {
	//获取数据库连接
	sqlConn := sqlx.NewMysql(c.DB.DataSource)
	return &ServiceContext{
		Config: c,
		//添加初始化rpc客户端逻辑
		RpcUser: userclient.NewUser(zrpc.MustNewClient(
			c.RpcClientConf,
		)),
		//设置指定表操作model模型
		TUserModel: model.NewTUserModel(sqlConn, c.Cache),
		//没生成缓存响应代码时使用: TUserModel: model.NewTUserModel(sqlConn),
	}
}
  1. logic业务接口中增加数据库相关操作
func (l *UserLoginLogic) UserLogin(req *types.UserLoginReq) (resp *types.UserLoginResp, err error) {

	user, err := l.svcCtx.TUserModel.FindOne(l.ctx, 11)
	if nil != err {
		fmt.Printf("====================query user err: %v", err)
		return nil, err
	}
	logx.Info("query user by id user: %v", user)

	//构建查询条件查询示例
	//whereBuilder := l.svcCtx.TUserModel.RowBuilder().Where(squirrel.Eq{"user_id": ""})
	//list, err := l.svcCtx.TUserModel.FindPageListByIdDESC(l.ctx, whereBuilder, req.LastId, req.PageSize)

	return &types.UserLoginResp{
		Message: user.UserName.String,
	}, nil
}

go-zero 整合 Masterminds/squirrel

  1. go-zero默认提供的sqlx通过goctl可以生成简单的crud操作,如果像使用复杂sql,可以整合Masterminds/squirrel
  2. 执行go get命令拉取"github.com/Masterminds/squirrel"

二. go-zero 整合 GORM 实现数据库操作

三. go-zero DB缓存机制

  1. 参考博客
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值