@Tabel(nama = "pelanggan")
class Pelanggan {
    @Kolom(nama = "id", tipe = "INTEGER", kunciUtama = true, tidakNull = true)
    private int id;

    @Kolom(nama = "email", tidakNull = true)
    private String email;

    private String catatanInternal; // tanpa @Kolom: diabaikan generator
}

@Tabel(nama = "pesanan")
class Pesanan {
    @Kolom(nama = "id", tipe = "INTEGER", kunciUtama = true)
    private int id;

    @Kolom(nama = "pelanggan_id", tipe = "INTEGER", tidakNull = true)
    private int pelangganId;

    @Kolom(nama = "total", tipe = "REAL", tidakNull = true)
    private double total;
}

class Sementara {} // tanpa @Tabel

public class ContohOrm {
    public static void main(String[] args) {
        System.out.println(PembuatTabel.buatDdl(Pelanggan.class));
        System.out.println();
        System.out.println(PembuatTabel.buatDdl(Pesanan.class));
        System.out.println();
        System.out.println("Pelanggan punya @Tabel? "
                + Pelanggan.class.isAnnotationPresent(Tabel.class));
        try {
            PembuatTabel.buatDdl(Sementara.class);
        } catch (IllegalArgumentException e) {
            System.out.println("Ditolak : " + e.getMessage());
        }
    }
}
