2016-05-31 57 views
1

我一直在試圖決定組織sql查詢和代碼的最佳方式。Golang如何讓我的SQL查詢不在我的代碼中?

現在我在我的軟件包中有一個models/文件夾,其中包含我所有的表格,每個表格都有自己的.go文件,其中包含一個與數據庫表匹配的結構。

雖然通過向其中投入大量的sqlQueries,但我一直在混淆我的代碼,特別是對於事務處理,而不是。

我怎樣才能構建我的代碼,而不用亂扔SQL查詢。

(我不想使用ORM做到這一點)

+0

https://github.com/mattermost/platform作爲商店和模型分開,就像他們在這裏做的一樣。 – khrm

+0

如何使用存儲過程?內聯SQL通常被認爲是非常糟糕的做法,不僅出於代碼清晰的原因,而且因爲當您使用諸如'fm.Sprintf'之類的東西來形成查詢字符串時,您無法保護自己免受SQL注入攻擊。還要檢查sql包中的'Prepare',它會返回一個'* Stmt',您可以根據需要重新使用它。 – evanmcdonnal

+1

您可以嘗試https://github.com/nleof/goyesql:解析文件並將SQL查詢關聯到地圖。用於從代碼邏輯中分離SQL。 – molivier

回答

1

您可以實現的東西,看起來像一個data mapper pattern。從EAA目錄

實施例:

enter image description here

在圍棋:

模型/ person.go

type Person struct { 
    Lastname string 
    Firstname string 
    Dependents int 
} 

映射器/ person.go

package mapper 

import m "whatever/model" 

type PersonMap struct { } 

func (m *PersonMap) Insert(p *m.Person) error { 
    // SQL query 
    return nil 
} 

func (m *PersonMap) Update(p *m.Person) error { 
    // SQL query 
    return nil 
} 

func (m *PersonMap) Delete(p *m.Person) error { 
    // SQL query 
    return nil 
} 

但是,該解決方案只是解決方案的一部分。關於數據庫交易,我認爲你應該從另一個「層」管理它們。