public interface Dao {
/**
* 保存(持久化)一个对象
*
* @param object
* 要保存的对象
*/
public void save(Object object);
/**
* 更新一个对象
*
* @param object
* 要修改的对象
*/
public void update(Object object);
/**
* 用语句更新记录
*
* @param queryString
* 查询语句
* @param parameters
* 参数
*/
public void updateByQuery(final String queryString,
final Object[] parameters);
/**
* 删除一个对象
*
* @param object
* 要删除的对象
*/
public void delete(Object object);
/**
* 根据类型和对象id删除一个对象
*
* @param clazz
* 类型
* @param id
* 对象id
*/
public void delete(Class clazz, Serializable id);
/**
* 根据类型删除全部对象
*
* @param clazz
* 类型
* @return Integer
*/
public Integer deleteAll(final Class clazz);
/**
* 根据查询和参数删除全部对象
*
* @param queryString
* 查询语句
* @param parameters
* 参数
* @return Integer
*/
public Integer deleteByQuery(final String queryString,
final Object[] parameters);
/**
* 获得某个类型的全部对象列表
*
* @param clazz
* 类型
* @return 对象集合
*/
public List findAll(Class clazz);
/**
* 根据类型和对象id载入一个对象
*
* @param clazz
* 类型
* @param id
* 对象id
* @return 目标对象
*/
public Object load(Class clazz, Serializable id);
/**
* 根据类型和对象id从数据库取得一个对象
*
* @param clazz
* 类
* @param id
* 对象id
* @return 目标对象
*/
public Object get(Class clazz, Serializable id);
/**
* 根据查询语句和查询参数从数据库取得一个对象
*
* @param queryString
* 查询语句
* @param parameters
* 参数
* @return Object 单个对象
*/
public Object get(final String queryString, final Object[] parameters);
/**
* 命名查询
*
* @param queryName
* 命名查询语句
* @return 对象列表
*/
public List findByNamedQuery(final String queryName);
/**
* 依据单个参数做命名查询
*
* @param query
* 命名查询语句
* @param parameter
* 单个查询参数
* @return 对象列表
*/
public List findByNamedQuery(final String queryString,
final Object parameter);
/**
* 依据参数数组做命名查询
*
* @param query
* 命名查询语句
* @param parameters
* 查询参数数组
* @return 对象列表
*/
public List findByNamedQuery(final String queryString,
final Object[] parameters);
/**
* 查询全部
*
* @param query
* 查询语句
* @return 对象列表
*/
public List find(final String queryString);
/**
* 带参数查询全部
*
* @param queryString
* 查询语句
* @param parameters
* 查询参数
* @return 对象列表
*/
public List find(final String queryString, final Object[] parameters);
/**
* 分页查询
*
* @param queryString
* 查询语句
* @param parameters
* 参数
* @param pageInfo
* 分页信息
* @return List 对象列表
*/
public List findPageByQuery(final String queryString,
final Object[] parameters, final PageInfo pageInfo);
}
以下为Dao的Hibernate3实现
import java.io.*;
import java.util.*;
import org.hibernate.*;
import org.springframework.orm.hibernate3.*;
import org.springframework.orm.hibernate3.support.*;
/**
* 通用DAO的Hibernate实现
*
* @author SunHui
*
*/
public class DaoImpl extends HibernateDaoSupport implements Dao {
public void save(Object object) {
getHibernateTemplate().save(object);
}
public void update(Object object) {
getHibernateTemplate().update(object);
}
public void updateByQuery(final String queryString, final Object[] parameters) {
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery(queryString);
if (parameters != null) {
for (int i = 0; i < parameters.length; i++) {
query.setParameter(i, parameters[i]);
}
}
query.executeUpdate();
return null;
}
});
}
public void delete(Object object) {
getHibernateTemplate().delete(object);
}
public void delete(Class clazz, Serializable id) {
getHibernateTemplate().delete(load(clazz, id));
}
public Integer deleteAll(final Class clazz) {
return (Integer) getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery("delete "
+ clazz.getName());
return new Integer(query.executeUpdate());
}
});
}
public List findAll(Class clazz) {
return getHibernateTemplate().find("from " + clazz.getName());
}
public Object load(Class clazz, Serializable id) {
return getHibernateTemplate().load(clazz, id);
}
public Object get(Class clazz, Serializable id) {
return getHibernateTemplate().get(clazz, id);
}
public List findByNamedQuery(final String queryName) {
return getHibernateTemplate().findByNamedQuery(queryName);
}
public List findByNamedQuery(final String queryName, final Object parameter) {
return getHibernateTemplate().findByNamedQuery(queryName, parameter);
}
public List findByNamedQuery(final String queryName, final Object[] parameters) {
return getHibernateTemplate().findByNamedQuery(queryName, parameters);
}
public List find(final String queryString) {
return getHibernateTemplate().find(queryString);
}
public List find(final String queryString, final Object[] parameters) {
return getHibernateTemplate().find(queryString, parameters);
}
public List findPageByQuery(final String queryString, final Object[] parameters,
final PageInfo pageInfo) {
return (List) getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException {
Query query = session.createQuery(queryString);
if (parameters != null) {
for (int i = 0; i < parameters.length; i++) {
query.setParameter(i, parameters[i]);
}
}
ScrollableResults sr = query.scroll();
sr.last();
int totalCount = sr.getRowNumber();
int startIndex = (pageInfo.getPageIndex() - 1) * pageInfo.getPageSize();
query.setMaxResults(pageInfo.getPageSize());
query.setFirstResult(startIndex);
int totalRec = totalCount + 1;
pageInfo.setTotalRec(totalRec);
int totalPage = (totalRec % pageInfo.getPageSize() == 0) ? (totalRec / pageInfo.getPageSize())
: (totalRec / pageInfo.getPageSize()) + 1;
int[] pageNumbers = new int[totalPage];
for (int i = 0; i < totalPage; i++) {
pageNumbers[i] = (i + 1);
}
pageInfo.setPageNumbers(pageNumbers);
pageInfo.setTotalPage(totalPage);
pageInfo.setPageSize(pageInfo.getPageSize());
pageInfo.setPageIndex(pageInfo.getPageIndex());
pageInfo.setPrePage(pageInfo.getPageIndex() - 1);
pageInfo.setNextPage(pageInfo.getPageIndex() + 1);
return query.list();
}
}, true);
}
public Integer deleteByQuery(final String queryString, final Object[] parameters) {
return (Integer) getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery(queryString);
if (parameters != null) {
for (int i = 0; i < parameters.length; i++) {
query.setParameter(i, parameters[i]);
}
}
return new Integer(query.executeUpdate());
}
});
}
public Object get(final String queryString, final Object[] parameters) {
List list = getHibernateTemplate().find(queryString, parameters);
if (list != null && !list.isEmpty()) {
return list.get(0);
}
return null;
}
}
/**
* 通用分页信息类,用于承载分页信息
*
* @author SunHui
*
*/
public class PageInfo {
/**
* 总页数
*/
private int totalPage = 1;
/**
* 前一页
*/
private int prePage = 1;
/**
* 下一页
*/
private int nextPage = 1;
/**
* 总记录数
*/
private int totalRec = 0;
/**
* 默认每页记录数
*/
private final int defaultPageSize = 10;
/**
* 每页记录数
*/
private int pageSize = defaultPageSize;
/**
* 当前页码
*/
private int pageIndex = 1;
/**
* 全部页码,从1开始
*/
private int[] pageNumbers;
public int getPageIndex() {
return pageIndex;
}
public void setPageIndex(int pageIndex) {
this.pageIndex = pageIndex > 0 ? pageIndex : 1;
}
public int getNextPage() {
return nextPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage > this.totalPage ? this.totalPage : nextPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize > 0 ? pageSize : 10;
}
public int getPrePage() {
return prePage;
}
public void setPrePage(int prePage) {
this.prePage = prePage < 1 ? 1 : prePage;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage > 0 ? totalPage : 1;
}
public int getTotalRec() {
return totalRec;
}
public void setTotalRec(int totalRec) {
this.totalRec = totalRec > -1 ? totalRec : 0;
}
public int[] getPageNumbers() {
return pageNumbers;
}
public void setPageNumbers(int[] pageNumbers) {
this.pageNumbers = pageNumbers;
}
}
相关文章
- Java 数据结构-特点: 代表一个队列,通常按照先进先出(FIFO)的顺序操作元素。 实现类: LinkedList, PriorityQueue, ArrayDeque。 堆(Heap) 堆(Heap)优先队列的基础,可以实现最大堆和最小堆。 PriorityQueue<Integer minHeap = new PriorityQueue<>; PriorityQueue<Integer maxHeap = new PriorityQueue<>(Collections.reverseOrder); 树(Trees) Java 提供了 TreeNode 类型,可以用于构建二叉树等数据结构。 class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } 图(Graphs) 图的表示通常需要自定义数据结构或使用图库,Java 没有内建的图类。 以上介绍的只是 Java 中一些常见的数据结构,实际上还有很多其他的数据结构和算法可以根据具体问题选择使用。 其他一些说明 以下这些类是传统遗留的,在 Java2 中引入了一种新的框架-集合框架(Collection),我们后面再讨论。 枚举(Enumeration) 枚举(Enumeration)接口虽然它本身不属于数据结构,但它在其他数据结构的范畴里应用很广。 枚举(The Enumeration)接口定义了一种从数据结构中取回连续元素的方式。 例如,枚举定义了一个叫nextElement 的方法,该方法用来得到一个包含多元素的数据结构的下一个元素。 关于枚举接口的更多信息,请参见枚举(Enumeration)。 位集合(BitSet) 位集合类实现了一组可以单独设置和清除的位或标志。 该类在处理一组布尔值的时候非常有用,你只需要给每个值赋值一"位",然后对位进行适当的设置或清除,就可以对布尔值进行操作了。 关于该类的更多信息,请参见位集合(BitSet)。 向量(Vector) 向量(Vector)类和传统数组非常相似,但是Vector的大小能根据需要动态的变化。 和数组一样,Vector对象的元素也能通过索引访问。 使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。 关于该类的更多信息,请参见向量(Vector) 栈(Stack) 栈(Stack)实现了一个后进先出(LIFO)的数据结构。 你可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部。 当你从栈中取元素的时候,就从栈顶取一个元素。换句话说,最后进栈的元素最先被取出。 关于该类的更多信息,请参见栈(Stack)。 字典(Dictionary) 字典(Dictionary) 类是一个抽象类,它定义了键映射到值的数据结构。 当你想要通过特定的键而不是整数索引来访问数据的时候,这时候应该使用 Dictionary。 由于 Dictionary 类是抽象类,所以它只提供了键映射到值的数据结构,而没有提供特定的实现。 关于该类的更多信息,请参见字典( Dictionary)。 Dictionary 类在较新的 Java 版本中已经被弃用(deprecated),推荐使用 Map 接口及其实现类,如 HashMap、TreeMap 等,来代替 Dictionary。
- 一个通用的DAO模型实现增删改查
- 一个通用的DAO接口及其Hibernate3实现
- 一个通用的Json解析框架接口设计(二)- 实现
- 一个通用的DAO接口及其Hibernate3实现
- 一个通用的Json解析框架接口设计(二)- 实现
- spring容器中能拥有两个同种类型的bean吗。我有两个dao类同时实现一个接口,这两个接口注入时报了异常。
- Map接口及其重要实现类的方法总结:从HashMap中放入,查找,删除一个对象,并将全部value放入到一个数组中;获得HashMap的全部数据
- Spring自定义一个拦截器类SomeInterceptor,实现HandlerInterceptor接口及其方法的实例
- 如果我只要实现单一继承的一个通用类,请教用接口好还是用抽象类,那种效率更高一点.