Query DSL로 CRUD 수행하기: insert, select, update, delete
Exposed의 타입 안전 쿼리 DSL을 사용해 모든 CRUD 작업을 수행해 보세요.
Query DSL로 CRUD 수행하기: insert, select, update, delete은(는) CoddyKit의 무료 Kotlin Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Kotlin Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
쿼리 DSL 개요
Exposed의 쿼리 DSL을 사용하면 Kotlin 함수를 이용하여 타입 안전한 SQL 작업을 작성할 수 있습니다. 모든 작업은 transaction { } 블록 내부에서 수행됩니다. 매직 문자열이 없으므로 열 참조가 Kotlin 프로퍼티로 처리되고, 오타를 컴파일 시점에 찾을 수 있습니다.
삽입
행을 추가하려면 Table.insert { }를 사용하십시오. 람다는 InsertStatement를 받아 열 값을 [column] 연산자로 설정합니다:
transaction {
Users.insert {
it[Users.name] = "Alice"
it[Users.email] = "alice@example.com"
it[Users.age] = 30
}
}삽입 후 생성된 ID 가져오기
IdTable에서 insertAndGetId { }를 사용하면 삽입 후 자동으로 생성된 기본 키를 가져올 수 있습니다:
val newId: Long = transaction {
Users.insertAndGetId {
it[Users.name] = "Bob"
it[Users.email] = "bob@example.com"
}.value
}일괄 삽입
여러 행을 효율적으로 삽입하려면 batchInsert(list) { item -> ... }를 사용하십시오. Exposed는 이를 하나의 준비된 문장으로 묶습니다:
val newUsers = listOf("Carol" to "carol@e.com", "Dave" to "dave@e.com")
transaction {
Users.batchInsert(newUsers) { (name, email) ->
this[Users.name] = name
this[Users.email] = email
}
}모든 행 선택
모든 행을 가져오려면 Table.selectAll()을 사용하십시오. 결과를 ResultRow 객체의 시퀀스로 순회하고, row[Column]을 사용하여 열 값에 접근하십시오:
transaction {
Users.selectAll().forEach { row ->
println("${row[Users.id]}: ${row[Users.name]}")
}
}WHERE 절로 선택
.where { condition }(Exposed 0.46 이상) 또는 .select { condition }을 연결하여 행을 필터링하십시오. 조건에는 연산자 오버로드(eq, like, greater 등)가 사용됩니다:
transaction {
Users.selectAll()
.where { Users.age greater 25 }
.forEach { println(it[Users.name]) }
}특정 열 선택
.select(col1, col2)에 열 목록을 전달하면 해당 열만 가져옵니다. 이는 SELECT col1, col2 FROM ...과 같습니다:
transaction {
Users.select(Users.name, Users.email)
.where { Users.age lessEq 30 }
.map { it[Users.name] to it[Users.email] }
.forEach(::println)
}업데이트
기존 행을 수정하려면 Table.update({ condition }) { }을 사용하십시오. 내부 람다는 UpdateStatement를 받으며, [column]을 사용하여 새 값을 설정합니다:
transaction {
Users.update({ Users.id eq 1L }) {
it[Users.name] = "Alice Updated"
it[Users.age] = 31
}
}삭제
조건식과 일치하는 행을 삭제하려면 Table.deleteWhere { condition }을 사용하십시오. 삭제된 행의 수를 반환합니다:
transaction {
val deleted = Users.deleteWhere { Users.id eq 5L }
println("Deleted $deleted rows")
}정렬 및 제한
.orderBy(column to SortOrder.ASC)와 .limit(n)을 연결하여 결과를 정렬하고 페이지로 나누십시오. offset을 선택적으로 지정할 수도 있습니다:
transaction {
Users.selectAll()
.orderBy(Users.name to SortOrder.ASC)
.limit(10, offset = 20)
.map { it[Users.name] }
.forEach(::println)
}집계 및 개수
Exposed의 열 연산자를 통해 표준 SQL 집계 함수를 사용하십시오. 예를 들어 Users.id.count(), Users.age.avg(), Users.age.max() 등이 있습니다:
transaction {
val total = Users.selectAll().count()
println("Total users: $total")
}빠른 확인
IdTable에 행을 삽입한 후 자동으로 생성된 기본 키를 반환하는 Exposed 함수는 무엇인가요?
복습: 쿼리 DSL을 사용한 CRUD
핵심 내용:
insert { }— 행 추가;insertAndGetId { }— 행을 추가하고 PK 가져오기selectAll().where { }— 필터를 사용한 쿼리;.orderBy(),.limit()연결update({ condition }) { }— 행 수정;deleteWhere { }— 행 삭제- 모든 작업은
transaction { }내부에서 실행됩니다 - 열 참조는 컴파일 시점에 안전하므로 문자열로 열 이름을 지정할 필요가 없습니다
자주 묻는 질문
“Query DSL로 CRUD 수행하기: insert, select, update, delete” 강의는 무료인가요?
네 — “Query DSL로 CRUD 수행하기: insert, select, update, delete” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Kotlin Academy 강의 전체를 잠금 해제할 수 있습니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“Query DSL로 CRUD 수행하기: insert, select, update, delete”에서 뭘 배우나요?
Exposed의 타입 안전 쿼리 DSL을 사용해 모든 CRUD 작업을 수행해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Kotlin Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Kotlin Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Kotlin Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“Query DSL로 CRUD 수행하기: insert, select, update, delete” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Kotlin Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Kotlin Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Exposed 설정: 데이터베이스 연결과 트랜잭션 DSL
- Table DSL로 테이블 정의하기
- Query DSL로 CRUD 수행하기: insert, select, update, delete
- Exposed DAO: 엔터티 클래스와 관계