如何从Go中的多个表构造对象

时间:2015-10-10 14:33:00

标签: database go

我试图找到使用多个数据库表所代表的对象的最佳方法。

对于数据库访问,我用自己的类型包装了sqlx,然后定义了一些方法:

type DB struct {
    *sqlx.DB
}
func (db *DB) GetSomething(id uint32) *Something {} 
func (db *DB) AddSomething(*Something) {}

对于使用单个数据库表进行一对一映射的对象,它非常有用。我看到了几种使用多表对象的方法:

  1. 定义* DB上的方法,然后从多个表中进行选择 构造一个对象。保存类似。
  2. 在* DB之上创建一个构造对象的图层。
  3. 不要构造对象,使用它的部分。
  4. 我更喜欢2号,但需要有关如何在Go中设计它的帮助。

1 个答案:

答案 0 :(得分:0)

如果只是为了减少每次需要User的代码重复,请将其放在处理用户的地方。如果您愿意,可以UserServicecreateUserisUserNameAvailable。有些人会更进一步,为数据检索和持久性(DAO层)创建单独的层,对我来说,这有点过于样板。

有时您会发现您可能根本不需要单独的方法。您从数据库中提取复杂的报告,但唯一需要的是通过单个休息端点返回。用户名和密码哈希需要用户的唯一时间是在登录期间 - 只需使用它来取消登录(用户名,密码)方法。在这些情况下,只需在您的业务方法中直接致电sqlx