Furkan Zumrut

Generic Dao ile crud işlemlerini tekrarlamaktan kaçının!

Merhaba arkadaşlar,

Sizlere Dao katmanını dizayn ederken işinizi gerçekten kolaylaştıracak bir yöntemden bahsedeceğim.

Öncelikle biliyorsunuz ki temel crud işlemleri çoğu projelerde bulunur ve kullanılır. Bizim elimizdede bir sürü tablo varsa her tablo için ayrı select,update,delete yazmaktan yorulabiliriz. İşte burada Generic Dao devreye giriyor.

IGenericDao arayüzümüzü aşağıda şekilde oluşturuyoruz.

public interface IGenericDao <T> {


    void insert(T o);

    T find(Integer id);

    void update(T o);

    void delete(T o);
}

Ardından GenericDao implementasyonumuzu oluşturmamız gerekiyor. Her bir crud işlemi için tanımladığım methodları yazıyorum.

public class GenericDao <T> implements IGenericDao<T>{
	private Class<T> type;
	private SessionFactory sessionFactory;

	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}
	
	@Autowired
	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}
	
	public GenericDao() {
        Type t = getClass().getGenericSuperclass();
        ParameterizedType pt = (ParameterizedType) t;
        type = (Class) pt.getActualTypeArguments()[0];
	}

	public void insert(T o) {
		Session session = getSessionFactory().getCurrentSession();
		session.beginTransaction();
		session.save(o);
		session.getTransaction().commit();
	}



	public void update(T o) {
		Session session = getSessionFactory().getCurrentSession();
		session.beginTransaction();
		session.update(o);
		session.getTransaction().commit();
	}

	public void delete(T o) {
		Session session = getSessionFactory().getCurrentSession();
		session.beginTransaction();
		session.delete(o);
		session.getTransaction().commit();
	}

	@Override
	public T find(Integer id) {
		Session session = getSessionFactory().getCurrentSession();
		session.beginTransaction();
		@SuppressWarnings("unchecked")
		T o = (T) session.get(type, id);
		session.getTransaction().commit();
		return o;
	}


}

 

Şimdi ise diyelim ki elimizde bir User tablosunu temsil eden User sınıfımız var ve GenericDao’dan yararlanarak temel crud işlemleri yaptırmak istiyoruz. O halde şöyle olması gerekiyor.

public interface IUserDao extends IGenericDao<User> {
    // Şimdilik ekstra bir method tanımlamıyorum. Siz isterseniz
    // temel crud methodlarının yanında kendinize özel methodlar tanımlayabilirsiniz

}

 

Şimdide implementasyonumuzu yazmamız gerekiyor.

public class UserDao extends GenericDao<User> implements IUserDao{

	

}

Artık UserDao için dahil ettiğimiz GenericDao’daki tüm methodları kullanabiliriz.

 

 

More from my site

  • Mockito ile Unit Test Yazımı
  • JHipster ile AngularJS ve Spring projelerinizi hızlıca ayağa kaldırın!
  • Postgresql Hibernate Code Generation Tool
  • org.hibernate.LazyInitializationException: could not initialize proxy – no Session hatası ve çözümü
  • Getting Started with Scalate: Simple Web Application with Spring MVC
  • java.lang.ClassNotFoundException: javax.persistence.Entity hatası ve çözümü
dao layer generic, generic dao, java generic dao
Java, JPA/Hibernate

Recent Posts

  • How to run java jar in Elastic beanstalk with custom jvm parameters? (Procfile)
  • How to change timezone with ebextension in Elastic Beanstalk?
  • Save your money shutting down EC2 Instance with AWS Lambda!
  • Keep your Test Environment more stable with Pre-Branch
  • Getting Started with Scalate: Simple Web Application with Spring MVC

Medium

Pages

  • CV

Categories

  • Android
  • AWS
  • CXF
  • Devops
  • Genel
  • Java
  • Javascript
  • JAX-RS
  • JPA/Hibernate
  • JSF
  • Maven
  • Postgresql
  • Servlet
  • Spring
  • Tomcat

Archives

  • August 2017
  • June 2016
  • October 2015
  • June 2015
  • May 2015
  • April 2015
  • February 2015
  • December 2014
  • November 2014
  • October 2014
  • June 2014
  • May 2014
  • June 2011

Theme created by Mick de Graaf

age of civilization
tank stars