勉強しながらの小型パッケージング--主流のフレームワークを利用してDao層の汎用化を行い、Spring 3.0+Hibernate3.3.2汎用Dao層統合(三)

4617 ワード

エンティティBeanの作成が完了すると、次は重要なDaoレイヤになります.各エンティティBeanが1つのDaoレイヤだけで基本的な添削を行うことができるように、JDK 1を採用しました.5の中の新しい特性は汎用的に配置する.ここではBasicDaoImplの実装方法を簡単に説明するだけで、コードは以下の通りです.
package org.lxh.dao.impl;



import java.io.Serializable;

import java.util.List;

import org.hibernate.criterion.DetachedCriteria;

import org.lxh.dao.interfaces.BasicDaoIf;

import org.springframework.stereotype.Repository;



@Repository("basicDao")

public  class BasicDaoImpl<T,PK extends Serializable>extends BasicSupportDao implements BasicDaoIf<T, PK> {



	@Override

	public boolean deleteAll(final T t) {

		getHibernateTemplate().deleteAll(this.findAll((Class<T>)t.getClass()));

		return true;

	}



	@Override

	public boolean deleteById(final Class<T> entityClass,final PK id) {

		getHibernateTemplate().delete(this.findById(entityClass,id));

		return true;

	}



	@Override

	public List<T> findAll(final Class<T> entityClass) {

		 

		return getHibernateTemplate().findByCriteria(DetachedCriteria.forClass(entityClass));

	}



	@Override

	public T findById(final Class<T> entityClass,final PK id) {

		 

		return (T)getHibernateTemplate().get(entityClass, id);

	}



	@Override

	public boolean save(final T t) {

		getHibernateTemplate().save(t);

		return true;

	}



	@Override

	public boolean update(final T t) {

		getHibernateTemplate().update(t);

		return true;

	}



}

Dao層の実現はSpringJpa方式を採用し、中のRepositoryはxmlの中のの中の内容に相当するが、basicDaoはクラスからインタフェースを引用したほか、BasicSupportDaoが継承されていることが発見され、BasicSupportDaoの現在の機能はSpringの中のHibernateDaoSupportを継承するための1つしかなく、HibernateTemplateを注入し、この方法を使用しない場合、直接extends HibernateDaoSupportを使用すると、次のエラーコードが発生します.「org.springframework.beans.factory.NoSuchBeanDefinitionException:No bean named'basicDao'is defined」は、SpringがJPA定義を採用する際に現在のクラスをインスタンス化しているため、HibernateDaoSupportを継承すると、HibernateDaoSupportソースコードのSessionFactoryとHibernateTemplateはfinalでは修正できないため、Springプロファイルから注入できないとエラーが報告されるため、BasicSupportを新規作成する必要がありますDaoは代わりに使います.コードは次のとおりです.
package org.lxh.dao.impl;



import javax.annotation.Resource;

import org.springframework.orm.hibernate3.HibernateTemplate;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;



public class BasicSupportDao extends HibernateDaoSupport {

	

	@Resource(name="hibernateTemplate")

	public void setHibernatetemplate(HibernateTemplate hibernateTemplate){

		super.setHibernateTemplate(hibernateTemplate);

	}



}
@Resource(name="
hibernateTemplate")は、Springで構成されているxmlファイルのbeanを指すidの名前です.
hibernateTemplateは、@Service、@Repository、@Componentに対応する名前を指すこともできますが、上記の方法に加えてBasicDaoImplにSpringでHibernateのテンプレートを加えることもできます.hibernateTemplateは、getter、setterメソッドを生成します.0の例は、hibernateTemplateを直接加える方法を比較的推奨するものである.
注意:public class BasicDaoImpl classの前にabstractを入れるとbasicDaoが見つからないというエラーも発生しますので、解決策はしばらく見つかりません