实战---GoFrame的CRUD需求设计(注意事项和知识补充)

模块规范-gen service

该命令通过分析给定的logic业务逻辑模块目录下的代码,自动生成service目录接口代码

需要注意:

由于该命令是根据业务模块生成service接口,因此只会解析二级目录下的go代码文件,并不会无限递归分析代码文件。以logic目录为例,该命令只会解析logic/xxx/*.go文件。因此,需要logic层代码结构满足一定规范。
不同业务模块中定义的结构体名称在生成的service接口名称时可能会重复覆盖,因此需要在设计业务模块时保证名称不能冲突。

注意**logic/xxx/*.go**的路径,如果找不到internal/logic的路径,就改一下根目录,一般都是再cd一层。

dao.GfUser.Ctx(ctx).Data(do.GfUser{}).All()

这句话啥意思?什么作用?什么时候用?怎么用?如果是查询的话,必须得用这个吗?

ChatGPT:

  • dao.GfUser:这是一个数据访问对象(DAO),用于操作名为 GfUser 的数据表。
  • .Ctx(ctx):这是链式调用的一部分,用于设置操作的上下文。ctx 是一个 context.Context 类型的上下文对象。
  • .Data(do.GfUser{}):这是链式调用的另一部分,用于设置操作的数据对象。do.GfUser{} 是一个结构体类型,表示要进行操作的数据对象。
  • .All():这是链式调用的最后一部分,表示进行全部数据的查询操作。

具体解释如下:

  1. dao.GfUser:表示对名为 GfUser 的数据表进行操作的数据访问对象(DAO)。该 DAO 提供了一系列的方法,用于对数据表进行增删改查等操作。
  2. .Ctx(ctx):通过链式调用的方式,将上下文对象 ctx 绑定到数据访问对象上。这样,在执行后续的数据库操作时,可以使用该上下文对象传递额外的信息或控制数据库操作的行为。
  3. .Data(do.GfUser{}):通过链式调用的方式,设置要操作的数据对象。do.GfUser{} 是一个结构体类型,表示要进行操作的数据对象。这个结构体的具体定义可能在代码的其他部分有所说明,它包含了与数据表中列对应的字段,用于进行数据的插入、更新等操作。
  4. .All():通过链式调用的方式,表示进行全部数据的查询操作。这将返回数据表中的所有记录,以供进一步的处理或返回给调用方。

这段代码的作用是在数据访问对象 dao.GfUser 上设置上下文对象 ctx,并设置操作的数据对象为 do.GfUser{},然后执行全部数据的查询操作。它适用于需要查询数据表中的所有记录的场景。

请注意,如果只需要查询数据表中的部分记录,可以使用其他方法,如 One()(查询一条记录)、Where()(根据条件查询记录)等。具体使用哪种方法取决于业务需求。并不是所有的查询操作都必须使用 .All() 方法。根据具体的需求和业务场景,选择适当的方法来进行查询操作。

Postman发送结构体类型的请求格式

请添加图片描述

// 图书信息
type BookInformation struct {
   Id           int    ` dc:"book_id" json:"id"`
   Name         string ` json:"book_name"`
   ISBN         string `json:"Book_ISBN"`
   Translator   string `json:"translator"`
   Date         string ` json:"publish_date"`
   Publisher_id int    `json:"publisher_Id"`
}

// 修改
// 说明里面已经存在了,我需要先查询出来,再修改
type UpdateReq struct {
	g.Meta      `path:"/update" tags:"Update_Data" method:"get" summary:"修改图书信息"`
	Information BookInformation `json:"Book_Information"`
}

字典类型-gmap

gmap支持并发安全选项开关,在默认情况下是非并发安全的,开发者可以选择开启gmap的并发安全特性(传递初始化开关参数safe参数值为true, 必须在初始化时设定,不能运行时动态设定)。如:

m := gmap.New(true)
看一下这种用法:
// 处理数据过程中,为了防止空字段覆盖原始字段,提前设置一个map对象备份(倒腾)
data := gmap.New()
// 不为"",即证明有值,也就是需要修改,其余的不用修改,晕了
if gconv.String(in.Information.Name) != "" {
   data.Set("name", in.Information.Name)
}
if gconv.String(in.Information.ISBN) != "" {
   data.Set("ISBN", in.Information.ISBN)
}
if gconv.String(in.Information.Translator) != "" {
   data.Set("translator", in.Information.Translator)
}
if gconv.String(in.Information.Date) != "" {
   data.Set("date", in.Information.Date)
}
if gconv.String(in.Information.Publisher_id) != "" {
   data.Set("publisher_id", in.Information.Publisher_id)
}
_, err = g.Model("library").Data(data.Map()).Where("id = 4").Update()

return返回

分三种情况
1. 退出执行,不指定返回值(秃return)

(1) 函数没有返回值

func GetMoney(){
fmt.Println("money")
  return
}

func main(){
  GetMoney()
}

(2) 函数返回值有变量名

func GetMoney() (_amount int){
 _amount = 88
 fmt.Println("money: ",_amount)
  return
}
 
func main(){
  var amount  = GetMoney()
  fmt.Println("money: ",amount)
}

在返回值中定义了变量_amount,在函数退出时,可以不用显示的在return后边指定函数返回值,函数调用结束后,自动将之前定义的返回值变量作为这个函数的返回结果。(在函数体中已经赋值了)

2. 退出执行,指定返回值

func GetMoney() (_amount int){
 fmt.Println("money: ",_amount)
  return 88
}
 
func main(){
  var amount  = GetMoney()
  fmt.Println("money: ",amount)
}
3. 退出执行,指定返回值和指定默认值
func GetMoney() (_amount int){
_amount  = 99     //如果return后面没有指定返回值,就用赋给“返回值变量”的值
 fmt.Println("money: ",_amount)
  return 88       //如果return后面跟有返回值,就使用return后面的返回值
}
 
func main(){
  var amount  = GetMoney()  
  fmt.Println("money: ",amount)
}

ORM链式操作

ORM链式操作

通过连续的方法调用来构建复杂的查询操作。每个方法调用都会返回一个新的查询对象,可以在该对象上继续调用其他方法来添加更多的查询条件或设置。这种方式使代码更具可读性和可维护性,并且方便地构建灵活和复杂的数据库查询。

使用ORM链式操作,可以根据需求自由地添加、修改或删除查询条件,从而灵活地构建查询逻辑。这种方法尤其适用于需要根据不同的情况构建不同查询的场景,例如根据用户的过滤条件动态生成查询,或者在多个条件下逐步构建复杂的查询操作。
询条件或设置。这种方式使代码更具可读性和可维护性,并且方便地构建灵活和复杂的数据库查询。

使用ORM链式操作,可以根据需求自由地添加、修改或删除查询条件,从而灵活地构建查询逻辑。这种方法尤其适用于需要根据不同的情况构建不同查询的场景,例如根据用户的过滤条件动态生成查询,或者在多个条件下逐步构建复杂的查询操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值