CRUD ด้วย Query DSL: insert, select, update, delete
ดำเนินการ CRUD ทั้งหมดด้วย Query DSL ที่ปลอดภัยด้านชนิดของ Exposed
CRUD ด้วย Query DSL: insert, select, update, delete เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
ภาพรวม DSL สำหรับการสอบถาม
DSL สำหรับการสอบถามของ Exposed ช่วยให้คุณเขียนการดำเนินการกับ SQL ที่ตรวจสอบชนิดข้อมูลได้โดยใช้ฟังก์ชันของ Kotlin การดำเนินการทั้งหมดจะทำภายในบล็อก transaction { } ไม่มีสตริงที่กำหนดแบบฝังตายตัว การอ้างอิงคอลัมน์คือพร็อพเพอร์ตีของ Kotlin ดังนั้นข้อผิดพลาดจากการพิมพ์ชื่อจึงถูกตรวจพบระหว่างการคอมไพล์
การแทรกข้อมูล
ใช้ Table.insert { } เพื่อเพิ่มแถว โดยแลมบ์ดาจะได้รับ InsertStatement และคุณกำหนดค่าคอลัมน์โดยใช้ตัวดำเนินการ [column]:
transaction {
Users.insert {
it[Users.name] = "Alice"
it[Users.email] = "alice@example.com"
it[Users.age] = 30
}
}การแทรกข้อมูลและรับรหัสที่สร้างขึ้น
ใช้ insertAndGetId { } บน IdTable เพื่อดึงคีย์หลักที่สร้างขึ้นโดยอัตโนมัติหลังการแทรกข้อมูล:
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)
}การรวมค่าและการนับ
ใช้ฟังก์ชันรวมค่ามาตรฐานของ SQL ผ่านตัวดำเนินการคอลัมน์ของ Exposed เช่น Users.id.count(), Users.age.avg(), Users.age.max() และอื่น ๆ:
transaction {
val total = Users.selectAll().count()
println("Total users: $total")
}ตรวจสอบความเข้าใจ
ฟังก์ชันใดของ Exposed ที่ส่งคืนคีย์หลักซึ่งสร้างขึ้นโดยอัตโนมัติหลังจากแทรกแถวลงใน IdTable
สรุป: CRUD กับ Query DSL
ประเด็นสำคัญ:
insert { }— เพิ่มแถว;insertAndGetId { }— เพิ่มแถวและรับค่า PKselectAll().where { }— สอบถามข้อมูลพร้อมตัวกรอง; เชื่อมต่อกับ.orderBy(),.limit()ได้update({ condition }) { }— แก้ไขแถว;deleteWhere { }— ลบแถว- การดำเนินการทั้งหมดทำงานภายใน
transaction { } - การอ้างอิงคอลัมน์ปลอดภัยตั้งแต่เวลาคอมไพล์ — ไม่ต้องใช้ชื่อคอลัมน์แบบสตริง
เรียนรู้ Kotlin ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 51
- บทเรียน
- 203
คำถามที่พบบ่อย
บทเรียน “CRUD ด้วย Query DSL: insert, select, update, delete” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “CRUD ด้วย Query DSL: insert, select, update, delete” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “CRUD ด้วย Query DSL: insert, select, update, delete”
ดำเนินการ CRUD ทั้งหมดด้วย Query DSL ที่ปลอดภัยด้านชนิดของ Exposed คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “CRUD ด้วย Query DSL: insert, select, update, delete” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม
ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตั้งค่า Exposed: การเชื่อมต่อฐานข้อมูลและ DSL ธุรกรรม
- การกำหนดตารางด้วย DSL ของ Table
- CRUD ด้วย Query DSL: insert, select, update, delete
- Exposed DAO: คลาสเอนทิตีและความสัมพันธ์