论坛首页 Java版 DAO

[原创]Hibernate_Spring中通用的DAO类

浏览 9389 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2004-10-21
代码随手写的,前半部份已测试通过,后半部份还没来得及测试:

由于HQL语句中,有类的名字,和别名的应用,没有办法,只好做个init(Class class)方法.

DAO类:

[code:1]
package common.dao;

import java.util.*;

import net.sf.hibernate.*;
import org.springframework.orm.hibernate.support.*;


/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author 段洪杰
* @version 1.0
*/

public class BaseDAOImpl extends HibernateDaoSupport implements IBaseDAO {


private Class pojoClass;

/**
* 构造函数
*/

public BaseDAOImpl() {
super();
}

/**
* 构造函数
*/
public BaseDAOImpl(Class pojoClass) {
super();
this.pojoClass=pojoClass;
}

/**
* 增加记录
* @param object Object
*/
public void setObject(Object object) throws Exception {
getHibernateTemplate().save(object);
}


/**
* 通过ID取得记录
* @param id String
* @return Object
*/
public Object getObjectById(String id) throws Exception {
Object object = (Object) getHibernateTemplate().load(pojoClass, id);
return object;
}


/**
* 修改记录
* @param Object object
*/
public void modifyObject(Object object) throws Exception {
getHibernateTemplate().update(object);
}


/**
* 删除记录
* @param Object object
*/
public void removeObject(Object object) throws Exception {
getHibernateTemplate().delete(object);
}


////////////////////////////////////////////////////////
///// ///
/////以下部份不带审核功能 ///
///// ///
////////////////////////////////////////////////////////

/**
* 取记录总数
* @return int
*/
public int getObjectsCount() throws Exception {
int count = 0;
String queryString = "select count(*) from "+pojoClass.getName();
count = ((Integer) getHibernateTemplate().iterate(queryString).next()).
intValue();
return count;
}


/**
* 取所有记录集合
* @return Iterator
*/
public Iterator getAllObjects() throws Exception {
Iterator iterator = null;
String queryString = " select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" order by "+pojoClass.getName().toLowerCase()+".id desc";
List list = getHibernateTemplate().find(queryString);
iterator = list.iterator();
return iterator;

}


/**
* 取记录集合
* @return Iterator
* @param int position, int length
*/
public Iterator getObjects(int position, int length) throws Exception {
Iterator iterator = null;
String queryString = " select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" order by "+pojoClass.getName().toLowerCase()+".id desc";
Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//设置游标的起始点
query.setFirstResult(position);
//设置游标的长度
query.setMaxResults(length);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();
return iterator;
}


/**
* 取第一条记录
* @throws Exception
* @return Station
*/
public Object getFirstObject() throws Exception {
Iterator iterator = null;
Object object = null;
String queryString = "select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" order by "+pojoClass.getName().toLowerCase()+".id desc";
Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();
if (iterator.hasNext()) {
object = (Object) iterator.next();
}
return object;
}


/**
* 取最后一条记录
* @throws Exception
* @return Station
*/
public Object getLastObject() throws Exception {
Iterator iterator = null;
Object object = null;
String queryString = "select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" order by "+pojoClass.getName().toLowerCase()+".id asc";
Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();
if (iterator.hasNext()) {
object = (Object) iterator.next();
}
return object;

}


////////////////////////////////////////////////////////
///// ///
///// 以下部份表中要有特定字段才能正确运行 个人和企业 ///
///// ///
////////////////////////////////////////////////////////

/**
* 取符合条件记录总数, [表中要有 isperson 字段]
* @return int
* @param int isPerson
*/

public int getObjectsCountByIsperson(int isPerson) throws Exception {
int count = 0;
String queryString =
"select count(*) from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isperson =" + isPerson;
count = ((Integer) getHibernateTemplate().iterate(queryString).next()).
intValue();
return count;
}


/**
* 取所有符合条件记录集合, 模糊查询条件.[表中要有 isperson 字段]
* @return Iterator
* @param int isPerson
*/

public Iterator getAllObjectsByIsperson(int isPerson) throws Exception {
Iterator iterator = null;
String queryString = " select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isperson =" +
isPerson + " order by "+pojoClass.getName().toLowerCase()+".id desc";
List list = getHibernateTemplate().find(queryString);
//把查询到的结果放入迭代器
iterator = list.iterator();
return iterator;
}


/**
* 取符合条件记录集合, 模糊查询条件.[表中要有 isperson 字段]
* @return Iterator
* @param int isPerson,int position, int length
*/

public Iterator getObjectsByIsperson(int isPerson, int position, int length) throws
Exception {
Iterator iterator = null;
String queryString = " select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isperson =" +
isPerson + " order by "+pojoClass.getName().toLowerCase()+".id desc";
//创建查询
Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//设置游标的起始点
query.setFirstResult(position);
//设置游标的长度
query.setMaxResults(length);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();
return iterator;
}


////////////////////////////////////////////////////////
///// ///
///// 以下部份表中要有特定字段才能正确运行 查询部份 ///
///// ///
///////////////////////////////////////////////////////
/**
* 取符合条件记录总数, 模糊查询条件.[表中要有 title 字段]
* @return int
* @param String text
*/
public int getObjectsCount(String text) throws Exception {
int count = 0;
count = ((Integer) getHibernateTemplate().iterate(
"select count(*) from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".title like '%" + text +"%'").next()).intValue();
return count;
}


/**
* 取所有符合条件记录集合, 模糊查询条件.[表中要有 title 字段]
* @return Iterator
* @param String text
*/

public Iterator getAllObjects(String text) throws Exception {
Iterator iterator = null;
String queryString =
" select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".title like '%" + text +
"%' order by "+pojoClass.getName().toLowerCase()+".id desc";
//创建查询
Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();
return iterator;
}


/**
* 取符合条件记录集合, 模糊查询条件.[表中要有 title 字段]
* @return Iterator
* @param String text,int position, int length
*/
public Iterator getObjects(String text, int position, int length) throws
Exception {
Iterator iterator = null;
String queryString =
" select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".title like '%" + text +
"%' order by "+pojoClass.getName().toLowerCase()+".id desc";

//创建查询
Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//设置游标的起始点
query.setFirstResult(position);
//设置游标的长度
query.setMaxResults(length);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();
return iterator;
}


////////////////////////////////////////////////////////
///// ///
///// 以下部份表中要有特定字段才能正确运行 注册相关 ///
///// ///
////////////////////////////////////////////////////////

/**
* 取符合条件记录总数.[ 表中要有 registername 字段]
* @return int
* @param String text
*/
public int getObjectsCountByRegisterName(String registerName) throws Exception {
int count = 0;
count = ((Integer) getHibernateTemplate().iterate(
"select count(*) from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".registername = '" +
registerName + "'").next()).intValue();
return count;
}


/**
* 通过注册名取得一条记录,如有多条,只取第一条.[表中要有 registername字段]
* @param registername String
* @return Object
*/
public Object getObjectByRegisterName(String registerName) throws Exception {
Iterator iterator = null;
Object object = null;
String queryString =
" select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".registername='" +
registerName + "' order by "+pojoClass.getName().toLowerCase()+".id desc";
//创建查询
Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();
if (iterator.hasNext()) {
object = (Object) iterator.next();
}
return object;
}


/**
* 通过注册名取得所有记录集合.[表中要有 registername字段]
* @param registername String
* @return Iterator
*/
public Iterator getAllObjectsByRegisterName(String registerName) throws
Exception {
Iterator iterator = null;
String queryString =
" select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".registername='" +
registerName + "' order by "+pojoClass.getName().toLowerCase()+".id desc";
//创建查询
Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();
return iterator;
}


/**
* 通过注册名取得记录列表.[表中要有 registername字段]
* @param registername String
* @return Iterator
*/
public Iterator getObjectsByRegisterName(String registerName, int position,
int length) throws Exception {
Iterator iterator = null;
String queryString =
" select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".registername='" +
registerName + "' order by "+pojoClass.getName().toLowerCase()+".id desc";
//创建查询
Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//设置游标的起始点
query.setFirstResult(position);
//设置游标的长度
query.setMaxResults(length);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();
return iterator;
}


////////////////////////////////////////////////////////
///// ///
///// 以下部份表中要有特定字段才能正确运行 树型版块 ///
///// ///
////////////////////////////////////////////////////////

/**
* 取记录总数.[ 表中要有 board_id 字段]
* @return int
* @param String boardId
*/
public int getObjectsCountByBoard(String boardId) throws Exception {
int count = 0;

count = ((Integer) getHibernateTemplate().iterate(
"select count(*) from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".boardId = '" + boardId +
"'").next()).intValue();

return count;
}


/**
* 通过版块名取得所有记录集合.[表中要有 board_id字段]
* @param BoardId String
* @return Iterator
*/
public Iterator getAllObjectsByBoard(String boardId) throws Exception {
Iterator iterator = null;
String queryString = " select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".boardId='" +
boardId + "' order by "+pojoClass.getName().toLowerCase()+".id desc";
//创建查询
Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();
return iterator;
}


/**
* 通过版块名取得记录列表.[表中要有 board_id字段]
* @param BoardId String
* @return Iterator
*/
public Iterator getObjectsByBoard(String boardId, int position, int length) throws
Exception {
Iterator iterator = null;
String queryString = " select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".boardId='" +
boardId + "' order by "+pojoClass.getName().toLowerCase()+".id desc";

//创建查询
Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//设置游标的起始点
query.setFirstResult(position);
//设置游标的长度
query.setMaxResults(length);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();

return iterator;

}


/**
* 取符合条件记录总数.[ 表中要有 board_id 字段,title] 模糊查询title
* @return int
* @param String boardId ,String text
*/
public int getObjectsCountByBoard(String boardId, String text) throws Exception {
int count = 0;

count = ((Integer) getHibernateTemplate().iterate(
"select count(*) from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".boardId='" + boardId +
"' and "+pojoClass.getName().toLowerCase()+".title like '%" + text + "%'").next()).intValue();

return count;

}


/**
* 通过版块名取得记录列表.[表中要有 board_id字段] 模糊查询title
* @param String boardID,int position, int length
* @return Iterator
*/
public Iterator getObjectsByBoard(String boardId, int position, int length,
String text) throws Exception {
Iterator iterator = null;
String queryString = " select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".boardId='" +
boardId + "' and "+pojoClass.getName().toLowerCase()+".title like '%" + text +
"%' order by "+pojoClass.getName().toLowerCase()+".id desc";

//创建查询
Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//设置游标的起始点
query.setFirstResult(position);
//设置游标的长度
query.setMaxResults(length);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();
return iterator;

}


////////////////////////////////////////////////////////
///// ///
/////以下部份带有审核功能 ///
///// ///
////////////////////////////////////////////////////////

/**
* 取记录总数
* @return int
* @param int isAuditing
*/
public int getObjectsCount(int isAuditing) throws Exception {
int count = 0;

count = ((Integer) getHibernateTemplate().iterate(
"select count(*) from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isauditing=" +
isAuditing).next()).intValue();
return count;
}


/**
* 取所有记录集合
* @return Iterator
* @param int position, int length,int isAuditing
*/
public Iterator getAllObjects(int isAuditing) throws Exception {
Iterator iterator = null;
String queryString =
" select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isauditing=" + isAuditing +
" order by "+pojoClass.getName().toLowerCase()+".id desc";
Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();
return iterator;
}


/**
* 取记录集合
* @return Iterator
* @param int position, int length,int isAuditing
*/
public Iterator getObjects(int position, int length, int isAuditing) throws
Exception {
Iterator iterator = null;
String queryString =
" select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isauditing=" + isAuditing +
" order by "+pojoClass.getName().toLowerCase()+".id desc";

Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//设置游标的起始点
query.setFirstResult(position);
//设置游标的长度
query.setMaxResults(length);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();

return iterator;
}


////////////////////////////////////////////////////////////////
///// ///
///// 以下部份表中要有特定字段才能正确运行 有审核功能 个人和企业 ///
///// ///
///////////////////////////////////////////////////////////////

/**
* 取符合条件记录总数, [表中要有 isperson isAuditing 字段]
* @return int
* @param int isPerson,int isAuditing
*/

public int getObjectsCountByIsperson(int isPerson, int isAuditing) throws
Exception {
int count = 0;

count = ((Integer) getHibernateTemplate().iterate(
"select count(*) from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isperson =" + isPerson +
" and "+pojoClass.getName().toLowerCase()+".isauditing=" + isAuditing).next()).intValue();

return count;
}


/**
* 取所有符合条件记录集合, 模糊查询条件.[表中要有 isperson isAuditing 字段]
* @return Iterator
* @param int isPerson,int isAuditing
*/

public Iterator getAllObjectsByIsperson(int isPerson, int isAuditing) throws
Exception {
Iterator iterator = null;
String queryString = " select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isperson =" +
isPerson + " and "+pojoClass.getName().toLowerCase()+".isauditing=" + isAuditing +
" order by "+pojoClass.getName().toLowerCase()+".id desc";

Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();

return iterator;
}


/**
* 取符合条件记录集合, 模糊查询条件.[表中要有 isperson isAuditing 字段]
* @return Iterator
* @param int isPerson,int position, int length,int isAuditing
*/

public Iterator getObjectsByIsperson(int isPerson, int position, int length,
int isAuditing) throws Exception {
Iterator iterator = null;
String queryString = " select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isperson =" +
isPerson + " and "+pojoClass.getName().toLowerCase()+".isauditing=" + isAuditing +
" order by "+pojoClass.getName().toLowerCase()+".id desc";

Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//设置游标的起始点
query.setFirstResult(position);
//设置游标的长度
query.setMaxResults(length);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();

return iterator;

}


////////////////////////////////////////////////////////
///// ///
///// 要有特定字段才能正确运行 有审核功能 查询部份 ///
///// ///
///////////////////////////////////////////////////////
/**
* 取符合条件记录总数, 模糊查询条件.[表中要有 title 字段]
* @return int
* @param String text,int isAuditing
*/
public int getObjectsCount(String text, int isAuditing) throws Exception {
int count = 0;

count = ((Integer) getHibernateTemplate().iterate(
"select count(*) from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isauditing=" +
isAuditing + " and "+pojoClass.getName().toLowerCase()+".title like '%" + text + "%'").next()).
intValue();

return count;
}


/**
* 取所有符合条件记录集合, 模糊查询条件.[表中要有 title 字段]
* @return Iterator
* @param String text,int isAuditing
*/

public Iterator getAllObjects(String text, int isAuditing) throws Exception {
Iterator iterator = null;
String queryString =
" select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isauditing=" + isAuditing +
" and "+pojoClass.getName().toLowerCase()+".title like '%" + text + "%' order by "+pojoClass.getName().toLowerCase()+".id desc";

Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();

return iterator;
}


/**
* 取符合条件记录集合, 模糊查询条件.[表中要有 title 字段]
* @return Iterator
* @param String text,int position, int length,int isAuditing
*/
public Iterator getObjects(String text, int position, int length,
int isAuditing) throws Exception {
Iterator iterator = null;
String queryString =
" select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isauditing=" + isAuditing +
" and "+pojoClass.getName().toLowerCase()+".title like '%" + text + "%' order by "+pojoClass.getName().toLowerCase()+".id desc";

//创建查询
Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//设置游标的起始点
query.setFirstResult(position);
//设置游标的长度
query.setMaxResults(length);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();

return iterator;
}


////////////////////////////////////////////////////////
///// ///
///// 要有特定字段才能正确运行 有审核功能 注册相关 ///
///// ///
////////////////////////////////////////////////////////

/**
* 取符合条件记录总数.[ 表中要有 registername isauditing字段]
* @return int
* @param String text,int isAuditing
*/
public int getObjectsCountByRegisterName(String registerName, int isAuditing) throws
Exception {
int count = 0;

count = ((Integer) getHibernateTemplate().iterate(
"select count(*) from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isauditing=" +
isAuditing + " and "+pojoClass.getName().toLowerCase()+".registername = '" + registerName + "'").next()).
intValue();

return count;
}


/**
* 通过注册名取得一条记录,如有多条,只取第一条.[表中要有 registername isauditing字段]
* @param registername String,int isAuditing
* @return Object
*/
public Object getObjectByRegisterName(String registerName, int isAuditing) throws
Exception {
Iterator iterator = null;
Object object = null;

String queryString =
" select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isauditing=" + isAuditing +
" and "+pojoClass.getName().toLowerCase()+".registername='" + registerName + "' order by "+pojoClass.getName().toLowerCase()+".id desc";

Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();
if (iterator.hasNext()) {
object = (Object) iterator.next();
}

return object;
}


/**
* 通过注册名取得所有记录集合.[表中要有 registername isauditing字段]
* @param registername String,int isAuditing
* @return Iterator
*/
public Iterator getAllObjectsByRegisterName(String registerName, int isAuditing) throws
Exception {
Iterator iterator = null;

String queryString =
" select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isauditing=" + isAuditing +
" and "+pojoClass.getName().toLowerCase()+".registername='" + registerName + "' order by "+pojoClass.getName().toLowerCase()+".id desc";

Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();

return iterator;
}


/**
* 通过注册名取得记录列表.[表中要有 registername isauditing字段]
* @param registername String,int isAuditing
* @return Iterator
*/
public Iterator getObjectsByRegisterName(String registerName, int position,
int length, int isAuditing) throws
Exception {
Iterator iterator = null;
String queryString =
" select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isauditing=" + isAuditing +
" and "+pojoClass.getName().toLowerCase()+".registername='" + registerName + "' order by "+pojoClass.getName().toLowerCase()+".id desc";

//创建查询
Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//设置游标的起始点
query.setFirstResult(position);
//设置游标的长度
query.setMaxResults(length);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();

return iterator;
}


////////////////////////////////////////////////////////
///// ///
///// 要有特定字段才能正确运行 有审核功能 树型版块 ///
///// ///
////////////////////////////////////////////////////////

/**
* 取记录总数.[ 表中要有 board_id isauditing字段]
* @return int
* @param String boardId,int isAuditing
*/
public int getObjectsCountByBoard(String boardId, int isAuditing) throws
Exception {
int count = 0;

count = ((Integer) getHibernateTemplate().iterate(
"select count(*) from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isauditing=" +
isAuditing + " and "+pojoClass.getName().toLowerCase()+".boardId = '" + boardId + "'").next()).intValue();

return count;
}


/**
* 通过版块名取得所有记录集合.[表中要有 board_id isauditing字段]
* @param BoardId String,int isAuditing
* @return Iterator
*/
public Iterator getAllObjectsByBoard(String boardId, int isAuditing) throws
Exception {
Iterator iterator = null;

String queryString =
" select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isauditing=" + isAuditing +
" and "+pojoClass.getName().toLowerCase()+".boardId='" + boardId + "' order by "+pojoClass.getName().toLowerCase()+".id desc";

Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();
return iterator;
}


/**
* 通过版块名取得记录列表.[表中要有 board_id isauditing字段]
* @param BoardId String,int isAuditing
* @return Iterator
*/
public Iterator getObjectsByBoard(String boardId, int position, int length,
int isAuditing) throws Exception {
Iterator iterator = null;
String queryString =
" select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isauditing=" + isAuditing +
" and "+pojoClass.getName().toLowerCase()+".boardId='" + boardId + "' order by "+pojoClass.getName().toLowerCase()+".id desc";

//创建查询
Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//设置游标的起始点
query.setFirstResult(position);
//设置游标的长度
query.setMaxResults(length);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();

return iterator;

}


/**
* 取符合条件记录总数.[ 表中要有 board_id isauditing字段,title] 模糊查询title
* @return int
* @param String boardId ,String text,int isAuditing
*/
public int getObjectsCountByBoard(String boardId, String text, int isAuditing) throws
Exception {
int count = 0;

count = ((Integer) getHibernateTemplate().iterate(
"select count(*) from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isauditing=" +
isAuditing + " and "+pojoClass.getName().toLowerCase()+".boardId='" + boardId +
"' and "+pojoClass.getName().toLowerCase()+".title like '%" +
text + "%'").next()).intValue();

return count;

}


/**
* 通过版块名取得记录列表.[表中要有 board_id字段 isauditing] 模糊查询title
* @param String boardId,int position, int length,int isAuditing
* @return Iterator
*/
public Iterator getObjectsByBoard(String boardId, int position, int length,
String text, int isAuditing) throws Exception {
Iterator iterator = null;
String queryString =
" select "+pojoClass.getName().toLowerCase()+" from "+pojoClass.getName()+" as "+pojoClass.getName().toLowerCase()+" where "+pojoClass.getName().toLowerCase()+".isauditing=" + isAuditing +
" and "+pojoClass.getName().toLowerCase()+".boardId='" + boardId + "' and "+pojoClass.getName().toLowerCase()+".title like '%" + text +
"%' order by "+pojoClass.getName().toLowerCase()+".id desc";

//创建查询
Query query = getHibernateTemplate().createQuery(getSession(), queryString);
//设置游标的起始点
query.setFirstResult(position);
//设置游标的长度
query.setMaxResults(length);
//记录生成
List list = query.list();
//把查询到的结果放入迭代器
iterator = list.iterator();

return iterator;

}

/**
* 设置DAO操作的POJO类
* @param pojoObject Object
*/
public void init(Class pojoClass) {
this.pojoClass = pojoClass;
}


}

[/code:1]

JUNIT测试类
[code:1]
package common.dao;

import junit.framework.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import net.sf.hibernate.HibernateException;

import oa.pojo.*;
/**
* <p>Title: OA1.0</p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2004</p>
*
* <p>Company: </p>
*
* @author 段洪杰
* @version 1.0
*/
public class TestBaseDAOImpl extends TestCase {
private IBaseDAO baseDAO = null;
private ApplicationContext ac;


protected void setUp() throws Exception {
super.setUp();
ac = new FileSystemXmlApplicationContext("F:/jbproject/oa_1_0/web/WEB-INF/applicationContext-hibernate.xml");
baseDAO =(BaseDAOImpl) ac.getBean("baseDAO");
}

protected void tearDown() throws Exception {
super.tearDown();
}

public void testSetObject() throws Exception{
Cart cart=new Cart();
cart.setBoardId("root");
cart.setTitle("dhj测试");
cart.setMessage("内容!");
cart.setRegisterName("dhj");
cart.setCount(new java.lang.Integer(10));
cart.setCreateDate(new java.util.Date());
cart.setOutDate(new java.util.Date());

baseDAO.setObject(cart);

User user=new User();
user.setRegisterName("yx");
user.setCreateDate(new java.util.Date());
user.setOutDate(new java.util.Date());
baseDAO.setObject(user);

// assertEquals("return value", expectedReturn, actualReturn);
}
public void testgetObjectById() throws Exception{
Cart cart=new Cart();
baseDAO.init(cart.getClass());
cart=(Cart)baseDAO.getObjectById("40288548ffba056100ffba0564bd0001");

User user=new User();
baseDAO.init(user.getClass());
user=(User)baseDAO.getObjectById("40288548ffba056100ffba0564dc0002");

assertEquals("return value", "张-----------", cart.getTitle());
assertEquals("return value", "dhj修改", user.getRegisterName());
}
public void testModifyObject() throws Exception{
Cart cart=new Cart();
baseDAO.init(cart.getClass());
cart=(Cart)baseDAO.getObjectById("40288548ffba01a300ffba01a6ab0001");
cart.setTitle("修改成功");
baseDAO.modifyObject(cart);


User user=new User();
baseDAO.init(user.getClass());
user=(User)baseDAO.getObjectById("40288548ffba056100ffba0564dc0002");
user.setRegisterName("dhj修改");
baseDAO.modifyObject(user);
//assertEquals("return value", "张-----------", cart.getTitle());
// assertEquals("return value", "dhj", user.getRegisterName());
}
/*
public void testRemoveObject() throws Exception{
Cart cart=new Cart();
baseDAO.init(cart.getClass());
cart=(Cart)baseDAO.getObjectById("40288548ffba5e8100ffba5e84790001");
baseDAO.removeObject(cart);


User user=new User();
baseDAO.init(user.getClass());
user=(User)baseDAO.getObjectById("40288548ffba5e8100ffba5e84a80002");
baseDAO.removeObject(user);
//assertEquals("return value", "张-----------", cart.getTitle());
// assertEquals("return value", "dhj", user.getRegisterName());
}
*/
public void testGetObjectsCount() throws Exception{

int cartCount = 0;
Cart cart = new Cart();
baseDAO.init(cart.getClass());

cartCount = baseDAO.getObjectsCount();

int userCount = 0;
User user = new User();
baseDAO.init(user.getClass());
userCount = baseDAO.getObjectsCount();

assertEquals("return value", "0", cartCount+"");
assertEquals("return value", "0", userCount+"");
}

}

[/code:1]
   
时间:2004-10-22
看到1000多行的代码我就头晕有几个疑问
1。关于init方法,为什么不使用直接在方法里加一个参数的办法
[code:1]getObjectById(Class class,String id)[/code:1]
如果在一个service中对象中有针对两个Class的查询,如果我忘记了init,可能会报NullPointException.或者DAO是个singleton对象,那每次查询一个新的对象都要重新init
2。由于hibernateTemplate只提供一些简单的Hibernate API,当一些要求无法完成时应该怎么做,我都是使用excute/excuteFind方法来完成的
[code:1]
public void refresh(final Object object) {
try {
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException {
session.refresh(object);

return null;
}
});
} catch (DataAccessException e) {
if (log.isDebugEnabled()) {
log.debug("Unable to refresh entity" + object.toString(),e);
}

throw new DaoException("无法刷新对象",e);
}
}
[/code:1]
我的看法是为了保持对HibernateTemplate使用的一致性,当然直接使用getSession也无可厚非
引用
This base class is mainly intended for HibernateTemplate usage
but can also be used when working with SessionFactoryUtils directly,
e.g. in combination with HibernateInterceptor-managed Sessions.
Convenience getSession and closeSessionIfNecessary methods are provided
for that usage.

3。BaseDao的设计我也觉得有点问题,我好像没有找到一般的查询接口
[code:1]
List find(String hql(or myQl));
[/code:1]
还有一些特定字段,如代码中的IsPerson.....,我觉得不一定非要放到BaseDao中来,可以再写一个BusinessDao继承BaseDao,然后在其中完成这些功能。除非你所有的表都有IsPerson或类似的字段?
   
0 请登录后投票
时间:2004-10-22
贴点Interface来看,不过一个Class写这么多有点太复杂了
   
0 请登录后投票
时间:2004-10-22
这是作为公共API来调的,如果只是普通功的的WEB系统,OA系统,论坛. 基本只要调这个DAO就可以完成开发!

有些约定的字段,如果表中没有,说明你不需要这个方法,那你不要调它,是不会出错的.
   
0 请登录后投票
时间:2004-10-22
Shine 写道
看到1000多行的代码我就头晕有几个疑问
1。关于init方法,为什么不使用直接在方法里加一个参数的办法
[code:1]getObjectById(Class class,String id)[/code:1]
如果在一个service中对象中有针对两个Class的查询,如果我忘记了init,可能会报NullPointException.或者DAO是个singleton对象,那每次查询一个新的对象都要重新init
2。由于hibernateTemplate只提供一些简单的Hibernate API,当一些要求无法完成时应该怎么做,我都是使用excute/excuteFind方法来完成的
[code:1]
public void refresh(final Object object) {
try {
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException {
session.refresh(object);

return null;
}
});
} catch (DataAccessException e) {
if (log.isDebugEnabled()) {
log.debug("Unable to refresh entity" + object.toString(),e);
}

throw new DaoException("无法刷新对象",e);
}
}
[/code:1]
我的看法是为了保持对HibernateTemplate使用的一致性,当然直接使用getSession也无可厚非
引用
This base class is mainly intended for HibernateTemplate usage
but can also be used when working with SessionFactoryUtils directly,
e.g. in combination with HibernateInterceptor-managed Sessions.
Convenience getSession and closeSessionIfNecessary methods are provided
for that usage.

3。BaseDao的设计我也觉得有点问题,我好像没有找到一般的查询接口
[code:1]
List find(String hql(or myQl));
[/code:1]
还有一些特定字段,如代码中的IsPerson.....,我觉得不一定非要放到BaseDao中来,可以再写一个BusinessDao继承BaseDao,然后在其中完成这些功能。除非你所有的表都有IsPerson或类似的字段?


1。关于init方法. 用成员变量的方法显然更OOP和符合逻辑.在复杂的操作中运用也更简单.

2.HibernateTemplate+HQL,我不知道还有什么查询不可以做到的,为什么不保持一致性.

3.关于BaseDao的设计, 我反对通用接口.就是这个通用的DAO,我也认为不是良好的设计,虽然减少文件数,但是这个东西是个弱类型,再加上通用接口,更弱!
   
0 请登录后投票
时间:2004-10-22
dhj1 写道

1。关于init方法. 用成员变量的方法显然更OOP和符合逻辑.在复杂的操作中运用也更简单.

2.HibernateTemplate+HQL,我不知道还有什么查询不可以做到的,为什么不保持一致性.

3.关于BaseDao的设计, 我反对通用接口.就是这个通用的DAO,我也认为不是良好的设计,虽然减少文件数,但是这个东西是个弱类型,再加上通用接口,更弱!

1。如果是这样的话,我觉得你用setPojoClass这个名称好像更好一点,不过我不会觉得会有什么简单。例如我对一个以上的类型查询
[code:1] dao.init(A.class); dao.load(idA); dao.load(idB); [/code:1] 注意我这里漏掉了对B.class的init(Spring中我把DAO配置为singleton),这样容易出问题,而且万一A表中有相同的id可能就会一错再错。还不如直接在参数上直接说明类名来的清楚。而且DAO我一般认为是工具类,拿OO来说事好像不太合适。 2. 我不太赞成在DAO的接口参数中直接用HQL,毕竟DAO是为了隐藏Hibernate相关的东西,可以使用SQL的字符串或对象形式,选择由自己组装HQL语句。比如 [code:1] /** * 带有参数的查询如: * <p> * List result = xxx.find(PO.class,"entity.name=? AND entity.sex=?",new * Object[]{"Shane","Male"},new Class[]{String.class,String.class}; * * @param clazz * 实体类的类型 * @param query * 查询语句 * @param values * 查询参数的值的数组,与查询语句中的?对应 * @param clazzs * 查询参数的类型的数组,查询参数的类型支持 * <ul> * <li>java.lang.String * <li>java.lang.Integer * <li>java.lang.Double * <li>java.lang.Long * <li>java.util.Date * <li>java.sql.TimeStamp * </ul> * @return 查询结果 */ List find(Class clazz, String query, Object[] values, Class[] clazzs); List find(Clazz clazz,MyQuery query); [/code:1] 3.关于设计的问题,千人千种做法。不过如果不够通用,要增加什么新功能就要在接口上增加新方法的话会是件很麻烦的事情,特别是你的东西给三个以上的人用。那无休止的要求就会冒出来,我的看法是我实现通用的DAO,一般功能提供,你有什么特殊的要求自己继承了去玩[/code]
   
0 请登录后投票
时间:2004-10-22
特别的功能当然要去搞继承了! 不过多扩充些方法进来,以后可以少写HQL

楼主的这个列子:
[code:1]
1
2 dao.init(A.class);
3 dao.load(idA);
4 dao.load(idB);
5
[/code:1]

正是弱类型的通病.我们不太好定位他的错误. 如果用强类型,每个表一个DAO,文件数目大大增加.

但是只是从维护角度来看,强类型要定位错误简单的多. 在复杂的系统中,如果楼上的例子一错再错, 只是找错误就会浪费极大的时间和精力.

那还不如多用些DAO
   
0 请登录后投票
时间:2004-10-26
spring嘟嘟 写道
HQL从来不写在程序里


那写在哪里呢? .properties ?

我还是比较赞同Shine的意见, 而且一个BaseDao写成这样也太肥了.
我在自己做的project里面用的是这个Base:


[code:1]
package net.liuke.dao;

import java.io.Serializable;
import java.lang.reflect.Method;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;

import org.springframework.orm.ObjectRetrievalFailureException;
import org.springframework.orm.hibernate.SessionFactoryUtils;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;

public class BaseDao extends HibernateDaoSupport implements DAO {

protected transient final Log log = LogFactory.getLog(getClass());

public Session openSession() {
return SessionFactoryUtils.getSession(getSessionFactory(), false);
}

public Object getObject(Class entity, Serializable id) {
Session session = openSession();
try {
return session.get(entity, id);
} catch (HibernateException ex) {
throw SessionFactoryUtils.convertHibernateAccessException(ex);
}

}

public Object getObject(Object obj) throws DAOException {
Long id = null;
try {
Method meth = obj.getClass().getMethod("get_id", new Class[0]);
id = (Long) meth.invoke(obj, new Object[0]);
obj = getHibernateTemplate().get(obj.getClass(), id);
} catch (Exception e) {
throw new ObjectRetrievalFailureException(obj.getClass(), id);
}

return obj;
}

public Object saveObject(Object obj) {
getHibernateTemplate().saveOrUpdateCopy(obj);
return obj;
}

public void removeObject(Object obj) throws DAOException {
if (log.isDebugEnabled()) {
log.debug("Loading object to delete....");
}
obj = getObject(obj);
if (obj != null) {
getHibernateTemplate().delete(obj);
}

}

}

[/code:1]
   
0 请登录后投票
时间:2004-10-26
Giv3n 写道
spring嘟嘟 写道
HQL从来不写在程序里


那写在哪里呢? .properties ?

我还是比较赞同Shine的意见, 而且一个BaseDao写成这样也太肥了.
我在自己做的project里面用的是这个Base:


[code:1]
package net.liuke.dao;

import java.io.Serializable;
import java.lang.reflect.Method;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;

import org.springframework.orm.ObjectRetrievalFailureException;
import org.springframework.orm.hibernate.SessionFactoryUtils;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;

public class BaseDao extends HibernateDaoSupport implements DAO {

protected transient final Log log = LogFactory.getLog(getClass());

public Session openSession() {
return SessionFactoryUtils.getSession(getSessionFactory(), false);
}

public Object getObject(Class entity, Serializable id) {
Session session = openSession();
try {
return session.get(entity, id);
} catch (HibernateException ex) {
throw SessionFactoryUtils.convertHibernateAccessException(ex);
}

}

public Object getObject(Object obj) throws DAOException {
Long id = null;
try {
Method meth = obj.getClass().getMethod("get_id", new Class[0]);
id = (Long) meth.invoke(obj, new Object[0]);
obj = getHibernateTemplate().get(obj.getClass(), id);
} catch (Exception e) {
throw new ObjectRetrievalFailureException(obj.getClass(), id);
}

return obj;
}

public Object saveObject(Object obj) {
getHibernateTemplate().saveOrUpdateCopy(obj);
return obj;
}

public void removeObject(Object obj) throws DAOException {
if (log.isDebugEnabled()) {
log.debug("Loading object to delete....");
}
obj = getObject(obj);
if (obj != null) {
getHibernateTemplate().delete(obj);
}

}

}

[/code:1]


楼上的这个DAO也太瘦了. 如果搞点条件查询,每次都要去写HQL.

普通的查询无非是按时间段查询,标题查询,正文内容查询,按信息的录入用户的用户名查询.等,把这大部分封装了,多好呀!
   
0 请登录后投票
时间:2004-10-26
dhj1 写道

楼上的这个DAO也太瘦了. 如果搞点条件查询,每次都要去写HQL.

普通的查询无非是按时间段查询,标题查询,正文内容查询,按信息的录入用户的用户名查询.等,把这大部分封装了,多好呀!


完全没有问题,如果你的项目中有这样的要求,完全可以把这么操作提到基类中
但是你这个dao对我来说就没什么意义,我没有什么标题字段阿什么的
所以我建议还是在BaseDao只处理最基础的问题

你这样的Dao可以用一些继承的层次来表达
[code:1]
public Class BusinessDao extends BaseDao
[/code:1]
   
0 请登录后投票
论坛首页 Java版 DAO

跳转论坛:
JavaEye推荐