各位好!
黎活明老师讲的巴巴运动网大家不知道了解不?最近我在看这个视频。黎老师是用struts+spring+JPA来进行开发的。
其中有一个抽象类DaoSupport<T>用到了比较精巧的方式就是以后所有的DaoImpl都不需要写实体的处理方法,只需要继承DaoSupport<T>,并指明这个T的具体类型就可以了。我想用hibernate来实现,可思考了会,感觉实现不了。不知道大家有没有建议。DaoSupport<T>的代码如下:
package cn.itcast.service.base;import java.io.Serializable;import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;import cn.itcast.utils.GenericsUtils;@SuppressWarnings("unchecked")
@Transactional
public abstract class DaoSupport<T> implements DAO<T> {
@PersistenceContext protected EntityManager em;
/* 实体类 */
protected Class<T> entityClass = GenericsUtils.getSuperClassGenricType(getClass());
public void delete(Serializable entityid) {
em.remove(em.getReference(entityClass, entityid));
} @Transactional(propagation=Propagation.NOT_SUPPORTED)
public T find(Serializable entityid) {
return em.find(entityClass, entityid);
}
@Transactional(propagation=Propagation.NOT_SUPPORTED)
public long getCount() {
return (Long)em.createQuery("select count(o) from " + getEntityName(this.entityClass) + " o").getSingleResult();
}
/**
* 获取实体名称
* @return
*/
protected static <E> String getEntityName(Class<E> entityClass){
String entityName = entityClass.getSimpleName();
Entity entity = entityClass.getAnnotation(Entity.class);
if(entity.name()!=null && !"".equals(entity.name())) entityName = entity.name();
return entityName;
} public void save(T entity) {
em.persist(entity);
} public void update(T entity) {
em.merge(entity);
}}
黎活明老师讲的巴巴运动网大家不知道了解不?最近我在看这个视频。黎老师是用struts+spring+JPA来进行开发的。
其中有一个抽象类DaoSupport<T>用到了比较精巧的方式就是以后所有的DaoImpl都不需要写实体的处理方法,只需要继承DaoSupport<T>,并指明这个T的具体类型就可以了。我想用hibernate来实现,可思考了会,感觉实现不了。不知道大家有没有建议。DaoSupport<T>的代码如下:
package cn.itcast.service.base;import java.io.Serializable;import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;import cn.itcast.utils.GenericsUtils;@SuppressWarnings("unchecked")
@Transactional
public abstract class DaoSupport<T> implements DAO<T> {
@PersistenceContext protected EntityManager em;
/* 实体类 */
protected Class<T> entityClass = GenericsUtils.getSuperClassGenricType(getClass());
public void delete(Serializable entityid) {
em.remove(em.getReference(entityClass, entityid));
} @Transactional(propagation=Propagation.NOT_SUPPORTED)
public T find(Serializable entityid) {
return em.find(entityClass, entityid);
}
@Transactional(propagation=Propagation.NOT_SUPPORTED)
public long getCount() {
return (Long)em.createQuery("select count(o) from " + getEntityName(this.entityClass) + " o").getSingleResult();
}
/**
* 获取实体名称
* @return
*/
protected static <E> String getEntityName(Class<E> entityClass){
String entityName = entityClass.getSimpleName();
Entity entity = entityClass.getAnnotation(Entity.class);
if(entity.name()!=null && !"".equals(entity.name())) entityName = entity.name();
return entityName;
} public void save(T entity) {
em.persist(entity);
} public void update(T entity) {
em.merge(entity);
}}
解决方案 »
- 新手学习JSP/Servlet
- java.lang.reflect.InvocationTargetException,请问这个怎么解决啊?
- 用jmf为何在eclipse下没反应,在dos下却正常?
- 初学struts2,请看看简单例子为什么报404错误
- Tomcat
- 跪求 visibroker fo java 工具 ,最好是4.5或以上的版本
- 求一正则表达
- 砸锅卖铁高分求助:自定义标记
- 请问怎样用JAVA APPLET编写一个视频播放程序以及使它支持FLASH动画和其他流媒体呢???如果用APPLICATION,那怎样编写呢????
- 问个弱弱的问题,public static void main(String[] args)中的String[] args什么意思啊?
- 关于MQ,怎么异步接收队列消息?
- Web Service访问c#接口的问题
上面提到的这个类,我想直接用hibernate来实现,但好像操作起来有点困难。
不知道大家在使用hibernate的时候是不是每个实体类的DaoImpl都需要自己写自己的实体操作方法,还是抽象一个类,来封装一些基本的方法,以实现代码复用。
一般来说都是抽象一个类,来封装一些基本的方法(CURD),以实现代码复用。
jpa支持的东西hibernate就支持。只有扩冲的,没有缩水的。
通用dao的设计都差不多都是一个思路。有影响吗?
换成session注入进来不就可以了吗。
@resource protected SessionFactory sessionFactory;<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
......
</bean>调用地时候通过
sessionFactory.getCurrentSession().save(T);
public class UserServiceImpl extends DaoSupport<User> implements UserService { @Override
public void add(User t) {
super.add(t);
}
public class DaoSupport<T> implements Dao<T> {
protected Class<T> entityClass = GenericsUtils.getSuperClassGenricType(this.getClass());
@Autowired
protected HibernateTemplate ht;
@Override
public void add(T t) {
// TODO Auto-generated method stub
ht.save("User", t);
}
希望对你有用