728x90
반응형
Query
기본
type User struct {
ID uint
Name string
Age int
}
var users []User
db.Model(&user{}).Find(&users) // user에 대한 모든 데이터 출력
Map으로 찾기
var results []map[string]any
db.Model(&User{}).Find(&results)//key : column명, value : 값으로 매칭되어 map slice로 들어가게 된다.
FirstOrInit
db.FirstOrInit(&user, User{Name: "none_existing"})
db.FirstOrInit(&user, User{Name: "soomin"})
// User데이터 존재 시 DB에서 first(order by Id)로 객체를 찾아 반환하고,
// 없을 시 user 변수에 User{Name: 설정한 이름}으로 기본 초기화 되어 저장된다. DB는 저장 X user변수에만 저장
CreateInBatches
db.Where(User{Name: "soomin"}).CreateInBatches(&users, 100)
// 생성 시 배치를 통해 일괄작업을 할 수 있다.
Pluck
var ages []int64
db.Model(&User{}).Pluck("age", &ages)
// -> 하나의 컬럼을 슬라이스로 추출하고 싶을 때 사용
// -> 여러 컬럼을 슬라이스로 추출하고 싶을 땐 Find, Scan을 사용하면 된다.
Hooks
Create
- create, query, upate, delete 전 후에 호출되는 함수다.
- 트랜잭션에 맞게 에러 시 같이 롤백 된다.
- BeforeSave - 저장하기 전에 일어나는 함수
- BeforeCreate - 생성되기 전에 일어나는 함수
- AfterCreate - 생성된 후에 일어나는 함수
- AfterSave - 저장하기 전에 일어나는 함수
- 순서
- 트랜잭션 시작
- BeforeSave
- BeforeCreate
- DB 연결 전 저장
- 데이터베이스에 삽입
- DB 연결 후 저장
- AfterCreate
- AfterSave
- commit or rollback
func (u *User)BeforeCreate(tx *gorm.DB) (err error) {
//code
...
}
Update
- 순서
- 트랜잭션 시작
- BefroeSave
- BeforeUpdate
- DB 연결 전 저장
- DB 업데이트
- DB 연결 후 저장
- AfterUpdate
- AfterSave
- commit or rollback
Delete
- 순서
- 트랜잭션 시작
- BefroeDekete
- DB 에서 삭제
- AfterDelete
- commit or rollback
Find
- 순서
- DB에서 Find
- AfterFind
728x90
반응형
'Golang > ORM' 카테고리의 다른 글
[Entgo] Hooks 사용 시 주의 (0) | 2023.03.23 |
---|---|
[Entgo] Hooks (1) | 2022.12.07 |
[Entgo] CRUD API(작성 중) (0) | 2022.09.12 |
[Entgo] About Annotations (0) | 2022.09.03 |
[Entgo] About Mixin (0) | 2022.09.01 |