黑马程序员技术交流社区
标题:
分享一下,我写的代码可重用Dao实现类,利用范型
[打印本页]
作者:
付维翔
时间:
2012-10-25 15:04
标题:
分享一下,我写的代码可重用Dao实现类,利用范型
/**
* Dao操作的基本类,
*
* @author Keith
*
* @param <T>/所操作的对象
*/
public abstract class BaseDaoImpl<T, ID extends Serializable> extends
QueryDaoImpl {
/**
* 得到所要操作JavaBean对象的字节码,即Class对象,例如:return ApproveInfo.class;
*
* @return
*/
abstract protected Class<T> getEntityClass();
public BaseDaoImpl() {
}
protected T get(ID id) {
return get(id, false);
}
/**
* @see Session.get(Class,Serializable,LockMode)
* @param id
* 对象ID
* @param lock
* 是否锁定, 使用数据库的独占锁来实现悲观锁(<em>LockMode.UPGRADE</em>
* )。生成如下sql语句:select ...for update
* @return 持久化对象
*/
@SuppressWarnings("unchecked")
protected T get(ID id, boolean lock) {
T entity;
if (lock) {
entity = (T) template.get(getEntityClass(), id, LockMode.UPGRADE);
} else {
entity = (T) template.get(getEntityClass(), id);
}
return entity;
}
@SuppressWarnings("unchecked")
protected List<T> getAll() {
return template.find("FROM " + getEntityClass().getName());
}
@SuppressWarnings("unchecked")
public List<T> getByIds(Long... ids) {
if (ids == null || ids.length == 0) {
// 若所查询的的id集合为空,则返回一个空集合,防止空指针错误
return Collections.EMPTY_LIST;
}
String list = null;
StringBuilder idsList = new StringBuilder();
// 构造SQL语句中使用的 id 集合1,2,3...形式
for (Long a : ids) {
idsList.append(a).append(",");
}
// 去除最构造idsList时多填 加的一个“,”
if (idsList.length() != 0) {
list = idsList.substring(0, idsList.lastIndexOf(","));
}
// 返回指定ids的数据对象集合
return template.find("FROM " + getEntityClass().getName()
+ " o_cname WHERE o_cname.id IN (" + list + ")");
}
}
复制代码
如果有什么错误,欢迎大家给出意见,{:soso_e100:}
作者:
王龙
时间:
2012-10-25 15:32
学习了嘿嘿
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2