티스토리 뷰

반응형

Golang에서의 경량 ORM으로서의 bun package 다루며 경험한 내용을 정리해둔다.

 

Query building

 

링크: https://bun.uptrace.dev/guide/complex-queries.html#query-generation

 

Query 만들면서 조건에 따라 더욱 이어붙이는 건에 대하여

 

q = q.Limit() 결과가 단순히 q.Limit() 같은 것을 동료분이 이야기해 알게 되었다.

코드가 더욱 간결해진다. 그런데 링크를 보면 심지어 bun 패키지 설명도 차이를 모르는 것인가 싶다.

 

Example code with comment

 

아래 코드와 코멘트로 설명을 마무리 한다.

 

전체 GitHub Repo: https://github.com/nicewook/bun-orm-study

Query Building Example:  https://github.com/nicewook/bun-orm-study/blob/main/query-build/main.go

 

func main() {
	prepareDB()

	// Query build 방법 1
	query := db.NewSelect().Model((*User)(nil))
	fmt.Printf("memory address %p, query: %v\n", query, query)

	query = query.Where("name =?", "kim") // Where() 메서드의 결과를 왼쪽으로 대입한다
	fmt.Printf("memory address %p, query: %v\n", query, query)

	// Query build 방법 2
	query = db.NewSelect().Model((*User)(nil))
	fmt.Printf("memory address %p, query: %v\n", query, query)

	query.Where("name =?", "kim") // 대입을 시키지 않고 단순히 Where() 만을 실행한다.
	fmt.Printf("memory address %p, query: %v\n", query, query)
}

// 결과를 보면
// 1. query를 추가해주어도 두 경우 모두 메모리 주소가 바뀌지 않고, 생성된 query string 도 동일함을 알 수 있다.
// memory address 0x140002e8000, query: SELECT "u"."id", "u"."name" FROM "users" AS "u"
// memory address 0x140002e8000, query: SELECT "u"."id", "u"."name" FROM "users" AS "u" WHERE (name ='kim')
// memory address 0x140002e81e0, query: SELECT "u"."id", "u"."name" FROM "users" AS "u"
// memory address 0x140002e81e0, query: SELECT "u"."id", "u"."name" FROM "users" AS "u" WHERE (name ='kim')

 

반응형
TAG
, , , , ,
댓글
댓글쓰기 폼