Users  

   

Hobi  

   

Statistik  

Visitors
215
Articles
59
Articles View Hits
384891
   

User Online  

We have 14 guests and no members online

   

Membuat Generic DAO di Java

Details

Membuat Generic DAO

 

Pada article ini saya akan membahas tentang pembuatan Generic DAO, tetapi sebelum ke inti pembahasan saya akan jelaskan mengapa harus Generic DAO.

Apabila anda sudah terbiasa membuat suatu DAO (Data Akses Objek), pasti anda sangat terbiasa dengan ini, jika suatu entity class yang di dalamnya mewakili sebuah table di database maka untuk memisahkan proses akses ke database di perlukan sebuah DAO untuk setiap entity class. Menurut analisa saya, apa yang terjadi jika anda membuat suatu project besar yang memiliki banyak module yang di dalam nya memiliki banyak entity class. Tentunya si programmer dengan rajin dan sabar membuat satu persatu DAO tersebut untuk kebutuhan bisnis proses dari aplikasi. Nah disinilah Generic DAO diperlukan agar sang programmer tidak perlu melakukan pemborosan tersebut.

Sebetulnya dalam pembelajaran Generic DAO ini, saya sebelumnya melihat hanya ada satu Base DAO yang isinya implemenntasi dari method - method untuk proses akses ke database dan class Base DAO ini merupakan class generic. Akan tetapi masih di perlukan setiap class DAO untuk masing entity tersebut, hanya bedanya dengan adanya Generic DAO tersebut si programmer tidak perlu melakukan implementasi method untuk masing - masing DAO tersebut, jadi hanya tinggal seperti ini :

public class [Entity]Dao extends BaseDao<[Entity]>

Melihat dari contoh kode di atas, class tersebut merupakan kosong tanpa isi. Sebab implmentasinya sudah di tangani oleh class BaseDAO. Tapi menurut saya kode seperti itu masih tetap saja merepotkan, kemudian saya mencoba memodifikasinya kode tersebut, agar setiap transaksi menggunakan class yang sama seperti Persistence Managernya Cimande,  Nah sekarang kita langsung saja ke contoh kode.

Yang harus pertama di buat adalah class BaseDao.java

  1: public class BaseDaoHibernate<T> {
  2: 
  3:     @SuppressWarnings("unchecked")
  4:     protected Class domainClass;
  5: 
  6:     @Autowired protected SessionFactory sessionFactory;
  7: 
  8:     @SuppressWarnings("unchecked")
  9:     public BaseDaoHibernate() {
 10:         this.domainClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
 11:     }
 12: 
 13: 
 14:     public T save(T domain) {
 15:         sessionFactory.getCurrentSession().saveOrUpdate(domain);
 16:         return domain;
 17:     }
 18: 
 19:     public void delete(T domain) {
 20:         sessionFactory.getCurrentSession().delete(domain);
 21:     }
 22: 
 23:     @SuppressWarnings("unchecked")
 24:     public T findById(Object id) {
 25:         if(id == null) return null;
 26:         final T domain = (T) sessionFactory.getCurrentSession().get(domainClass, (Serializable) id);
 27:         return domain;
 28:     }
 29: 
 30: 
 31:     @SuppressWarnings("unchecked")
 32:     public List<T> findList(String query) {
 33:      return sessionFactory.getCurrentSession().createQuery(query).list();
 34:     }
 35: }
 36: 

setelah itu class yang harus di buat adalah GeneralDao.java

  1: @Repository
  2: public class GeneralDao extends BaseDaoHibernate<Object>{
  3: 
  4: }

jika class di atas sudah di buat, selanjut adalah pembuat interface dan class service yang di gunakan untuk setiap transaksi. Nah yang pertama di buat adalah Interface Manager.java

  1: 
  2: public interface Manager {
  3: 
  4:     void save (Object save);
  5:     void delete (Object delete);
  6:     Object findById (Object id);
  7:     List findList(String query);
  8: }
  9: 

setelah interface di buat, sekarang ke pembuatan class implmentasi dari interfacenya yaitu ManagerImplement.java

  1: @Service("manager")
  2: @Transactional(readOnly=true)
  3: public class ManagerImplement implements Manager {
  4: 
  5:     @Autowired GeneralDao generalDao;
  6:     
  7:     @Transactional
  8:     public void save(Object xclass) {
  9:         generalDao.save(xclass);
 10:     }
 11: 
 12:     @Transactional
 13:     public void delete(Object xclass) {
 14:         generalDao.delete(xclass);
 15:     }
 16: 
 17:     public Object findById(Object id) {
 18:         return generalDao.findById(id);
 19:     }
 20: 
 21:     public List findList(String query) {
 22:         return generalDao.findList(query);
 23:     }
 24: 
 25: }

setelah semuanya dibuat programmer bisa santai bertransaksi ke database tanpa harus membuat dao satu persatu. Nah untuk cara pakainya, bisa mengikuti contoh di bawah ini :

  1: public class Tester {
  2:  @Autowired private Manager manager;
  3:  
  4:  public static void main(String args[]) {
  5:   // Untuk Save
  6:   manager.save([Object]);
  7:  }
  8: }
  9: 

Fuihh, akhirnya articlenya selesai juga. Semoga bermanfaat bagi para pembaca yang membaca article ini, mohon maaf bila ada yang kurang atau ada yang salah dengan article ini.

Terima Kasih

Sumber

Add comment


Security code
Refresh

   

Indeks  

   
© ALLROUNDER