티스토리 뷰
Golang에서의 경량 ORM으로서의 bun package를 다루며 경험한 내용을 정리해둔다.
ScanAndCount
링크: https://bun.uptrace.dev/guide/query-select.html#count-rows
데이터베이스를 다루며 query 로 리스트를 가져올 때에는 Offset, Limit 를 이용해 그 일부만을 가져와야 할 때가 많다. 그러면서도 paignation 을 위해 전체 개수를 Count 해 주어야 한다.
bun 은 ScanAndCount() 기능을 제공한다. 이 매서드가 이쁜 것은 이 지점이다.
Offset, Limit가 적용되면서도 Count는 그것이 적용되지 않은 전체 개수를 세어주는 것이다.
Example code with comment
아래의 발췌한 코드와 코멘트로 설명을 마무리 한다.
전체 GitHub Repo: https://github.com/nicewook/bun-orm-study
ScanAndCount Example: https://github.com/nicewook/bun-orm-study/blob/main/scan-count/main.go
// 아래와 같이 User 4명을 테이블에 추가하였다.
type User struct {
bun.BaseModel `bun:"table:users,alias:u"`
ID int64 `bun:"id,pk,autoincrement"`
Name string `bun:"name,notnull"`
}
var users = []User{
{Name: "kim"},
{Name: "song"},
{Name: "park"},
{Name: "han"},
}
// 추가한 User를 Query하고 개수를 확인한다
func main() {
prepareDB()
var myUsers []User
// 전체 User를 query 한다. 4명의 User가 모두 Scan되고 Count값도 4가 된다.
query := db.NewSelect().Model((*User)(nil))
count, err := query.ScanAndCount(context.Background(), &myUsers)
fmt.Printf("count: %v, err: %v\n", count, err)
fmt.Println(prettyJson(myUsers))
// 이번에는 Limit를 1로 두었다. 1명의 User만이 Scan되지만 Count값이 여전히 전체 개수인 4이다.
count, err = query.Limit(1).ScanAndCount(context.Background(), &myUsers)
fmt.Printf("count: %v, err: %v\n", count, err)
fmt.Println(prettyJson(myUsers))
}
반응형
'golang' 카테고리의 다른 글
Golang ORM - Bun 삽질 이야기 - Automatic timestamp (0) | 2022.12.10 |
---|---|
Golang ORM - Bun 삽질 이야기 - Query building (0) | 2022.12.10 |
Golang: 양자 컴퓨터 이후의 암호기술 구현 패키지 sidh 분석 (0) | 2021.12.28 |
Golang: gorilla/websocket chatting 예제 분석 (0) | 2021.12.13 |
Golang: gorilla/websocket 으로 보는 websocket handshake (0) | 2021.11.30 |
반응형
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 노션
- go
- ChatGPT
- 클린 애자일
- solid
- 잡학툰
- agile
- strange
- OpenAI
- notion
- bun
- folklore
- clean agile
- 엉클 밥
- intellij
- Gin
- 2023
- github
- golang
- 영화
- 독서
- websocket
- 체호프
- API
- 오블완
- Bug
- 제이펍
- 인텔리제이
- 독서후기
- 티스토리챌린지
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함