您的位置:首页 > 其它

hibernate基于泛型基础增删改查方法封装

2016-06-07 20:39 267 查看



IBaseDao.java



public interface IBaseDao<T> {

public void save(T entity);

public void delete(String[] ids);

public void update(T entity);

public T find(int id);

public void saveOrUpdate(T entity);

public List<T> findAll();
}


BaseDaoImpl.java

public class BaseDaoImpl<T> extends BaseHibernateSupport implements IBaseDao<T> {

protected Logger log=Logger.getLogger(this.getClass());
protected Class<T> clazz;
/**

     * 通过反射泛型获取Class类型,getGenericSuperclass()方法获取对象的泛型的父类类型信息,

     * getActualTypeArguments()[0]方法得到T的真实类型

     * 

     */
public BaseDaoImpl(){
ParameterizedType pt=(ParameterizedType)this.getClass().getGenericSuperclass();
this.clazz=(Class<T>)pt.getActualTypeArguments()[0];
}
/**

     * 公共的增,删,改,查方法

     */
@Override
public void save(T entity) {
try {
this.getHibernateTemplate().save(entity);
} catch (HibernateException sqle) {
log.error(sqle.toString());
}

}

 
@Override
public void delete(String[] ids) {
T entity=null;
try {
for (int i = 0; i < ids.length; i++) {
entity=this.find(Integer.parseInt(ids[i]));
this.getHibernateTemplate().delete(entity);;
}
} catch (HibernateException e) {
log.error(e.toString());
}finally{
entity=null;
}

}

 
@Override
public void update(T entity) {
try {
this.getHibernateTemplate().update(entity);
} catch (HibernateException sqle) {
log.error(sqle.toString());
}

}

 
@Override
public T find(int id) {
T entity=null;
try {
entity=(T) this.getHibernateTemplate().get(clazz, id);
} catch (HibernateException e) {
entity=null;
log.error(e.toString());
}
return entity;
}

@Override
public void saveOrUpdate(T entity) {
try {
this.getHibernateTemplate().saveOrUpdate(entity);
} catch (RuntimeException e) {
throw e;
}
}
 
@Override
public List<T> findAll() {
List<T> list=(List<T>)this.getHibernateTemplate().find("from"+clazz.getName());
return list;
}

}


重写hibernateSupport

public class BaseHibernateSupport extends DaoSupport {

private SessionFactory sessionFactory;
private HibernateTemplate hibernateTemplate;

 
/**
* @return the sessionFactory
* @描述:
* @时间:2016
*/
public SessionFactory getSessionFactory() {
return sessionFactory;
}

/**
* @param sessionFactory the sessionFactory to set
*/
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
this.hibernateTemplate=createHibernateTemplate(sessionFactory);
}

public Session getSession(){
if (this.sessionFactory==null) {
throw new HibernateException("Session Create Fail,SessionFactory is null!");
}
return this.sessionFactory.getCurrentSession();
}
protected HibernateTemplate createHibernateTemplate(SessionFactory sessionFactory){
return new HibernateTemplate(sessionFactory);
}
/* (non-Javadoc)
* @see org.springframework.dao.support.DaoSupport#checkDaoConfig()
*/
@Override
protected void checkDaoConfig() throws IllegalArgumentException {
if (this.hibernateTemplate==null) {
throw new IllegalArgumentException("'sessionFactory' or 'hibernateTemplate' is required");
}

}
protected final Session getSession(boolean allowCreate) throws DataAccessResourceFailureException, IllegalStateException {

        return (!allowCreate ? SessionFactoryUtils.getSession(getSessionFactory(), false) : SessionFactoryUtils.getSession(getSessionFactory(),

        this.hibernateTemplate.getEntityInterceptor(), this.hibernateTemplate.getJdbcExceptionTranslator()));

    }

    protected final DataAccessException convertHibernateAccessException(HibernateException ex) {

        return this.hibernateTemplate.convertHibernateAccessException(ex);

    }

    protected final void releaseSession(Session session) {

        SessionFactoryUtils.releaseSession(session, getSessionFactory());

        if (null != session)

            session = null;

    }

    public final void setHibernateTemplate(HibernateTemplate hibernateTemplate) {

        this.hibernateTemplate = hibernateTemplate;

    }

    public final HibernateTemplate getHibernateTemplate() {

        return this.hibernateTemplate;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: