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