勉強しながらの小型パッケージング--主流のフレームワークを利用してDao層の汎用化を行い、Spring 3.0+Hibernate3.3.2汎用Dao層統合(三)
4617 ワード
エンティティBeanの作成が完了すると、次は重要なDaoレイヤになります.各エンティティBeanが1つのDaoレイヤだけで基本的な添削を行うことができるように、JDK 1を採用しました.5の中の新しい特性は汎用的に配置する.ここではBasicDaoImplの実装方法を簡単に説明するだけで、コードは以下の通りです.
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は代わりに使います.コードは次のとおりです.
hibernateTemplate")は、Springで構成されているxmlファイルのbeanを指すidの名前です.
hibernateTemplateは、@Service、@Repository、@Componentに対応する名前を指すこともできますが、上記の方法に加えてBasicDaoImplにSpringでHibernateのテンプレートを加えることもできます.hibernateTemplateは、getter、setterメソッドを生成します.0の例は、hibernateTemplateを直接加える方法を比較的推奨するものである.
注意:public class BasicDaoImpl classの前にabstractを入れるとbasicDaoが見つからないというエラーも発生しますので、解決策はしばらく見つかりません
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の中の
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が見つからないというエラーも発生しますので、解決策はしばらく見つかりません