j2ee学习笔记——初试ssh之泛型通用dao(转)
2009-11-27 10:57
513 查看
在做项目的时候每次都为每个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");
}
}
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");
}
}
相关文章推荐
- Java学习笔记之使用反射+泛型构建通用DAO
- J2EE学习笔记(8) 真是知易行难 初试Struts
- 委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式
- J2EE Servlet 学习笔记4
- java学习笔记之泛型
- j2ee学习 struts2 笔记补充property相关
- 黑马程序员--Java基础学习笔记【集合-List、泛型】
- nginx学习笔记4 nginx的配置文件1 通用配置
- 《Python 黑帽子》学习笔记 - SSH 端口转发 - Day 12
- [读书笔记]C#学习笔记七: C#4.0中微小改动-可选参数,泛型的可变性
- ssh学习笔记
- SSH用通用dao更新出现的问题
- SSH学习笔记之hibernate中的set排序以及struts中的token
- ssh学习笔记(1)
- Ubuntu学习笔记:通过ssh远程登录服务器
- [学习笔记]SSH连接虚拟机上RedHat的问题
- 《Lua程序设计》第7章 迭代器与泛型for 学习笔记
- 【J2EE核心开发学习笔记 009】MyBatis3操作数据库(CURD)
- 扬扬的J2EE学习笔记(三)Components and Roles组件和角色
- 扬扬的J2EE学习笔记(四)Platform Services平台服务