休眠工具&在DAO中的休眠模板

时间:2012-03-02 10:34:26

标签: spring hibernate dao hibernate-tools

我使用Hibernate工具Eclipse插件生成DAO实现,但它使用了“javax.persistence.EntityManager”。我想基于我使用Spring Framework提供的Hibernate模板的映射实体(使用JPA注释)生成DAO impl。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

这就是我们过去使用Spring Framework提供的Hibernate模板生成DAO Impl的DAO对象的方法。

使用ftl生成DAO java类,示例类似于

@Repository("hrdb.UserDao")
public class UserDao extends WMGenericDaoImpl <User, Integer> {

   @Autowired
   @Qualifier("hrdbTemplate")
   private HibernateTemplate template;

   public HibernateTemplate getTemplate() {
        return this.template;
   }
}

这就是我们的通用DAO impl的样子

public abstract class WMGenericDaoImpl<Entity extends Serializable, Identifier extends Serializable> implements WMGenericDao<Entity, Identifier> {

    private Class<Entity> entityClass;

    public abstract HibernateTemplate getTemplate();

    @SuppressWarnings("unchecked")
    @PostConstruct
    public void init() {
        if (getTemplate() == null)
            throw new RuntimeException("hibernate template is not set.");

        ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
        this.entityClass = (Class<Entity>) genericSuperclass.getActualTypeArguments()[0];
    }

    public Entity create(Entity entity) {
        Identifier identifier = (Identifier) getTemplate().save(entity);
        return findById(identifier);
    }

    public void update(Entity entity) {
        getTemplate().update(entity);
        getTemplate().flush();
    }

    public void delete(Entity entity) {
        getTemplate().delete(entity);
    }

    public Entity findById(Identifier entityId) {
        return getTemplate().get(entityClass, entityId);
    }
}

这里是WMGenericDao界面,

public interface WMGenericDao<Entity, Identifier> {

    Entity create(Entity entity);

    void update(Entity entity);

    void delete(Entity entity);

    Entity findById(Identifier entityId);
}

HibernateTemplate在spring.xml中声明。 通过这种实现,我们可以使用spring提供的hibernate模板在逆向工程过程中生成All DAO类。

答案 1 :(得分:0)

看看TypeTools。自述文件有一个generic DAO示例:

<section ng-controller="ShowImages as images" class="page" ng-hide="pics.length < 6">
     <div  class="container" data-ng-class="{ 'loaded': pics.length > 0 }">
         <div ng-show="layout == 'grid'" class="row">
               <!-- A view with big photos and no text -->
  <div ng-repeat="p in pics | limitTo: 6" class="column large-4 overlay-col">
      <a href="{{p.link}}" target="_blank"><img ng-src="{{p.images.standard_resolution.url}}" /></a>
       <div class="overlay-hover">
         <div class="overlay-content">
             <a href="{{p.comments.data|getFirstCommentFrom:'alx_lloyd'}}" class="cta-1">Discover now</a>
  </div>                                                
</div>
</div>
</div>

..