当前位置: 代码迷 >> J2EE >> j2ee学习札记——初试ssh之泛型通用dao(转)
  详细解决方案

j2ee学习札记——初试ssh之泛型通用dao(转)

热度:508   发布时间:2016-04-22 01:12:07.0
j2ee学习笔记——初试ssh之泛型通用dao(转)

在做项目的时候每次都为每个POJO实体写一个对应的DAO很麻烦,虽然可以由IDE或者一些快速生成工具来生成,但是也难免需要更改。处于这个原因,个人写了一个通用的泛型DAO来封装一些最基本的操作,包括对实体的增删改查。基于Spring的hibernate模板实现,初学,如有什么不好的地方请大家多多拍砖!

Java代码?
/**??
* DAO操作基类 本DAO层实现了通用的数据操作??
*???
* @author 黄磊??
*???
* @param <T>??
*??????????? POJO实体对象??
* @param <ID>??
*??????????? ID??
*/??
public class BaseHibernateDAO<T, ID extends Serializable> extends HibernateDaoSupport {???
??
??? private static final Logger logger = Logger.getLogger(BaseHibernateDAO.class);???
??
??? /**??
???? * 保存指定实体类??
???? *???
???? * @param entityobj??
???? *??????????? 实体类??
???? */??
??? public void save(T entity) {???????????
??????? try {???
??????????? getHibernateTemplate().save(entity);???
??????? } catch (RuntimeException e) {???
??????????? logger.error("保存实体异常", e);???
??????????? throw e;???
??????? }???
??? }???
??
??? /**??
???? * 删除指定实体??
???? *???
???? * @param entityobj??
???? *??????????? 实体类??
???? */??
??? public void delete(T entity) {???
??????? try {???
??????????? getHibernateTemplate().delete(entity);???
??????? } catch (RuntimeException e) {???
??????????? logger.error("删除实体异常", e);???
??????????? throw e;???
??????? }???
??? }???
???????
??? /**??
???? * 更新或保存指定实体??
???? *???
???? * @param entity 实体类??
???? */??
??? public void saveOrUpdate(T entity) {???
??????? try {???
??????????? getHibernateTemplate().saveOrUpdate(entity);???
??????? } catch (RuntimeException e) {???
??????????? logger.error("更新或保存实体异常", e);???
??????????? throw e;???
??????? }???
??? }???
??
??? /**??
???? * 查找指定ID实体类对象??
???? *???
???? * @param entityClass??
???? *??????????? 实体Class??
???? * @param id??
???? *??????????? 实体ID??
???? * @return 实体对象??
???? */??
??? @SuppressWarnings("unchecked")???
??? public T findById(Class<T> entityClass, ID id) {???
??????? try {???
??????????? return (T) getHibernateTemplate().get(entityClass, id);???
??????? } catch (RuntimeException e) {???
??????????? logger.error("查找指定ID实体异常,ID:" + id, e);???
??????????? throw e;???
??????? }???
??? }???
??
??? /**??
???? * 查找指定属性的实体集合??
???? *???
???? * @param entityClass??
???? *??????????? 实体??
???? * @param propertyName??
???? *??????????? 属性名??
???? * @param value??
???? *??????????? 条件??
???? * @return 实体集合??
???? */??
??? @SuppressWarnings("unchecked")???
??? public List<T> findByProperty(Class<T> entityClass, String propertyName,???
??????????? Object value) {???
??????? try {???
??????????? String queryStr = "from " + entityClass.getName()???
??????????????????? + " as model where model." + propertyName + "=?";??????????????
??????????? return getHibernateTemplate().find(queryStr, value);???
??????? } catch (RuntimeException e) {???
??????????? logger.error("查找指定条件实体集合异常,条件:" + propertyName, e);???
??????????? throw e;???
??????? }???
??? }???
??
??? /**??
???? * 查询指定HQL语句的分页数据集合??
???? *???
???? * @param hsql??
???? *??????????? HQL语句??
???? * @param firstRow??
???? *??????????? 开始记录号??
???? * @param maxRow??
???? *??????????? 最大记录号??
???? * @return 分页数据集合??
???? * @throws Exception??
???? *???????????? 抛出异常??
???? */??
??? @SuppressWarnings("unchecked")???
??? public List<T> findByPage(final String hsql, final int firstRow,???
??????????? final int maxRow) {????????
??????? try {???
??????????? return getHibernateTemplate().executeFind(new HibernateCallback() {???
??????????????? public Object doInHibernate(Session s)???
??????????????????????? throws HibernateException, SQLException {???
??????????????????? Query query = s.createQuery(hsql);???
??????????????????? query.setFirstResult(firstRow);???
??????????????????? query.setMaxResults(maxRow);???
??????????????????? List list = query.list();???
??????????????????? return list;???
??????????????? }???
??????????? });???
??????? } catch (RuntimeException e) {???
??????????? logger.error("分页查询异常,HQL:" + hsql, e);???
??????????? throw e;???
??????? }???
??? }??????
???????
??? /**??
???? * 从Spring上下文中获取本类对象??
???? * 此方法可能存在线程并发问题(待测)??
???? *???
???? * @param context Spring上下文??
???? * @return 本类对象???
???? */??
??? @SuppressWarnings("unchecked")???
??? public static BaseHibernateDAO getFromApplicationContext(WebApplicationContext context) {???
??????? return (BaseHibernateDAO)context.getBean("BaseHibernateDAO");???
??? }
}??

  相关解决方案