Monday, April 24, 2006

JDBC 4.0 Query Interface

เห็นแล้วต้องรีบแจ้งข่าว
binkley 's BLOG ลงเรื่อง Nifty JDBC 4.0
ลองดูตัวอย่าง code เขา
เขาใช้วิธีนี้ในการ insert ข้อมูลลง table
final BobQuery query = connection.createQueryObject(BobQuery.class);
query.addBob("Your Name Here.");

ดูเหมือนจะไม่มีอะไร ก็แค่ไปเรียก Query Object มาตัว แล้วก็เรียกใช้
method addBob
แต่จริงๆแล้ว Magic อยู่ที่ BobQuery ซึ่งประกาศเป็น interface ดังนี้
public interface BobQuery
extends BaseQuery {
@Update(sql = "INSERT INTO BOB(name) VALUES(?1)",
keys = RETURNED_KEYS_DRIVER_DEFINED)
DataSet addBob(final String name);

@Select("SELECT * FROM BOB WHERE name = ?1")
DataSet findBobByName(final String name);

@Select("SELECT * FROM BOB")
DataSet findAllBobs();

@Update("DELETE FROM BOB")
int removeAllBobs();
}

ว้าว ดูดี
ยังไม่หมด ทายสิว่า method findBobByName return อะไร
ถ้าดูใน interface มัน return DataSet
แต่ถ้าดูใน code เราสามารถ get Object จาก dataset ได้เลย
public class Bob {
public BigDecimal id;
public String name;
}
...

final Bob bob = query.findBobByName(name).get(0);

ดูจาก code ที่ binkley มันแปลกๆอยู่ตรง การ define interface
จากที่เขาเขียน
DataSet findBobByName(final String name);

จริงๆแล้ว มันน่าจะเขียนแบบนี้ มากกว่านั้น
DataSet<Bob> findBobByName(final String name);

อยากรู้แต่ยังขี้เกียจทดลองอยู่
(jdk1.5 ยังใช้ feature ไม่ครบเลย)

Related link from Roti

1 comment:

Brian Oxley said...

Nice code coloring--thanks. Wish I could read the language. :)