DAO

本文介绍了一个基于Hibernate的DAO层实现,包括数据的增删改查等核心操作,并提供了分页查询的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近想玩会,写点东西练下手,还没有经过测试,这个肯定不够完美,做个自已的备份用。

有人想用请自已测一下吧,有时间再继续进行修改完善。




package com.zhenjw.dao;

import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.zhenjw.common.HibernateSessionFactory;
import com.zhenjw.common.QueryResult;

/**
* Hibernate base DataBase Access Object
* @author zjw
* @datetime Jun 18, 200910:00:19 PM
*/

public class BaseDao {

private Logger logger=Logger.getLogger(this.getClass());

/**
*
*/
public BaseDao() {
// TODO Auto-generated constructor stub
}

/**
* 功能:保存数据
* @param entity
* @throws DaoException
*/
public void create(Object entity)throws DaoException
{
logger.debug("create , entity.classname"+entity.getClass().getName());

Session session=null;

Transaction tr=null;

boolean commitFlag=false;

try{

session=this.getSession();

tr=session.beginTransaction();

tr.begin();

session.save(entity);

tr.commit();

commitFlag=true;

session.flush();

}catch(HibernateException e)
{
this.haveHibernateException("basedao.create.error", e);
}
finally{

this.closeSession(session, tr, commitFlag);

}

}

/**
* 功能:修改数据
* @param entity
* @throws DaoException
*/
public void update(Object entity)throws DaoException
{
logger.debug("update , entity.classname"+entity.getClass().getName());

Session session=null;

Transaction tr=null;

boolean commitFlag=false;

try{

session=this.getSession();

tr=session.beginTransaction();

tr.begin();

session.update(entity);

tr.commit();

commitFlag=true;

session.flush();

}catch(HibernateException e)
{
this.haveHibernateException("basedao.update.error", e);
}
finally{

this.closeSession(session, tr, commitFlag);

}

}

/**
* 功能:根据ID得到对象
* @param clazz
* @param id
* @return Object
* @throws DaoException
*/
public Object getEntityById(Class clazz,long id)throws DaoException
{
Session session=null;

Object result=null;

try{

result=session.get(clazz, id);

}catch(HibernateException e)
{
this.haveHibernateException("basedao.getEntityById.error", e);

}finally
{
this.closeSession(session);

}

return result;

}

/**
* 功能:删除记录
* @param tableName 表名
* @param idFieldName 表的ID字段的名称
* @param id ID数组
* @throws DaoException
*/
public void delete(String tableName ,String idFieldName,long[] id)throws DaoException
{
logger.debug(" delete tableName="+tableName+" ,idFieldName="+ idFieldName );

if(id==null)

logger.debug(" id is null ");

else
{
StringBuilder idB=new StringBuilder();

for(int i=0 ;i<id.length;i++)
{
if(i>0)

idB.append(",");

idB.append(id[i]);

}

logger.debug(" id ="+idB.toString());

Session session=null;

Transaction tr=null;

boolean commitFlag=false;

try{

StringBuilder deleteSql=new StringBuilder();

deleteSql.append(" delete from ").append(tableName)
.append(" where ").append( idFieldName ).append(" in ( "+idB.toString()+" ) ");

logger.debug("deleteSql="+ deleteSql.toString());

session=this.getSession();

tr=session.beginTransaction();

tr.begin();

session.createSQLQuery( deleteSql.toString()).executeUpdate();

tr.commit();

commitFlag=true;

session.flush();

}catch(HibernateException e)
{
this.haveHibernateException("basedao.delete.error", e);

}finally{

this.closeSession(session, tr, commitFlag);

}
}

}

/**
* 功能:分页查询
* @param queryCount 查询记录总数的SQL
* @param queryData 查询数据的SQL
* @param pageNo 当前页的页码
* @param pageSize 每页显示的记录条数
* @return QueryResult
* @see com.zhenjw.common.QueryResult
* @throws DaoException
*/
public QueryResult queryBySql(StringBuilder queryCount,StringBuilder queryData,int pageNo,int pageSize)throws DaoException
{
return this.queryBySql(queryCount, queryData, pageNo, pageSize, null);
}

/**
* 功能:分页查询
* @param queryCount 查询记录总数的SQL
* @param queryData 查询数据的SQL
* @param pageNo 当前页的页码
* @param pageSize 每页显示的记录条数
* @param params 参数
* @return QueryResult
* @see com.zhenjw.common.QueryResult
* @throws DaoException
*/
public QueryResult queryBySql(StringBuilder queryCount,StringBuilder queryData,int pageNo,int pageSize,List params)throws DaoException
{
return this.queryBySql(queryCount.toString(), queryData.toString(), pageNo, pageSize, params);
}

/**
* 功能:分页查询
* @param queryCount 查询记录总数的SQL
* @param queryData 查询数据的SQL
* @param pageNo 当前页的页码
* @param pageSize 每页显示的记录条数
* @return QueryResult
* @see com.zhenjw.common.QueryResult
* @throws DaoException
*/
public QueryResult queryBySql(String queryCount,String queryData,int pageNo,int pageSize)throws DaoException
{
return this.queryBySql(queryCount, queryData, pageNo, pageSize, null);
}

/**
* 功能:分页查询
* @param queryCount 查询记录总数的SQL
* @param queryData 查询数据的SQL
* @param pageNo 当前页的页码
* @param pageSize 每页显示的记录条数
* @param params 参数
* @return QueryResult
* @see com.zhenjw.common.QueryResult
* @throws DaoException
*/
public QueryResult queryBySql(String queryCount,String queryData,int pageNo,int pageSize,List params)throws DaoException
{
QueryResult result=new QueryResult();

logger.debug("queryBySql \n queryCount="+queryCount+" \n queryData="+queryData+" \n pageNo ="+pageNo+" \n pageSize"+pageSize);

this.writeLogger(null, params);

Session session=null;

try{

session=this.getSession();

int totalRow=this.getRowCountNum(session.createSQLQuery(queryCount).list() );

result.setTotalRow(totalRow);

result.setPageSize(pageSize);

int totalPage=result.getPageNo();

if(totalPage<pageNo)

pageNo=totalPage;

result.setPageNo(pageNo);

//查询数据

SQLQuery query=session.createSQLQuery(queryData);

this.setParamters(params, query);

this.setTurnPageParam(pageNo, pageSize, query);

result.setDataList(query.list());

}catch(HibernateException e)
{
this.haveHibernateException("basedao.queryBySql.error", e);

}finally{

this.closeSession(session);
}

return result;
}

/**
* 功能:分页查询
* @param queryCount 查询记录总数的HQL
* @param queryData 查询数据的HQL
* @param pageNo 当前页的页码
* @param pageSize 每页显示的记录条数
* @return QueryResult
* @see com.zhenjw.common.QueryResult
* @throws DaoException
*/
public QueryResult queryByHql(StringBuilder queryCount,StringBuilder queryData,int pageNo,int pageSize)throws DaoException
{
return this.queryByHql(queryCount, queryData, pageNo, pageSize, null);
}

/**
* 功能:分页查询
* @param queryCount 查询记录总数的HQL
* @param queryData 查询数据的HQL
* @param pageNo 当前页的页码
* @param pageSize 每页显示的记录条数
* @param params 参数
* @return QueryResult
* @see com.zhenjw.common.QueryResult
* @throws DaoException
*/
public QueryResult queryByHql(StringBuilder queryCount,StringBuilder queryData,int pageNo,int pageSize,List params)throws DaoException
{
return this.queryByHql(queryCount.toString(), queryData.toString(), pageNo, pageSize, params);
}

/**
* 功能:分页查询
* @param queryCount 查询记录总数的HQL
* @param queryData 查询数据的HQL
* @param pageNo 当前页的页码
* @param pageSize 每页显示的记录条数
* @return QueryResult
* @see com.zhenjw.common.QueryResult
* @throws DaoException
*/
public QueryResult queryByHql(String queryCount,String queryData,int pageNo,int pageSize)
{
return this.queryByHql(queryCount, queryData, pageNo, pageSize, null);
}

/**
* 功能:分页查询
* @param queryCount 查询记录总数的HQL
* @param queryData 查询数据的HQL
* @param pageNo 当前页的页码
* @param pageSize 每页显示的记录条数
* @param params 参数
* @return QueryResult
* @see com.zhenjw.common.QueryResult
* @throws DaoException
*/
public QueryResult queryByHql(String queryCount,String queryData,int pageNo,int pageSize,List params)
{
QueryResult result=new QueryResult();

logger.debug("queryByHql \n queryCount="+queryCount+" \n queryData="+queryData+" \n pageNo ="+pageNo+" \n pageSize"+pageSize);

this.writeLogger(null, params);

Session session=null;

try{

session=this.getSession();

int totalRow=this.getRowCountNum(session.createQuery(queryCount).list() );

result.setTotalRow(totalRow);

result.setPageSize(pageSize);

int totalPage=result.getPageNo();

if(totalPage<pageNo)

pageNo=totalPage;

result.setPageNo(pageNo);

//查询数据

Query query=session.createQuery(queryData);

this.setParamters(params, query);

this.setTurnPageParam(pageNo, pageSize, query);

result.setDataList(query.list());

}catch(HibernateException e)
{
this.haveHibernateException("basedao.queryByHql.error", e);

}finally
{
this.closeSession(session);
}

return result;
}

/**
* 功能:查询数据
* @param queryData 查询数据的SQL语句
* @return List
* @throws DaoException
*/
public List queryBySql(String queryData)throws DaoException
{
return this.queryBySql(queryData, null);
}

/**
* 功能:查询数据
* @param queryData 查询数据的SQL语句
* @return List
* @throws DaoException
*/
public List queryBySql(StringBuilder queryData)throws DaoException
{
return this.queryBySql(queryData, null);
}

/**
* 功能:查询数据
* @param queryData 查询数据的SQL语句
* @param params 参数
* @return List
* @throws DaoException
*/
public List queryBySql(String queryData,List params)throws DaoException
{
logger.debug(" queryBySql queryData="+queryData);

this.writeLogger(null, params);

List result=null;

Session session=null;

try{

session=this.getSession();

SQLQuery query=session.createSQLQuery(queryData);

this.setParamters(params, query);

result=query.list();

}catch(HibernateException e)
{

this.haveHibernateException("basedao.queryBySql.error", e);

}finally
{
this.closeSession(session);
}

return result;

}

/**
* 功能:查询数据
* @param queryData 查询数据的SQL语句
* @param params 参数
* @return List
* @throws DaoException
*/
public List queryBySql(StringBuilder queryData,List params)throws DaoException
{
return this.queryBySql(queryData.toString(), params);
}

/**
* 功能:查询数据
* @param queryData 查询数据的HQL语句
* @return List
* @throws DaoException
*/
public List queryByHql(String queryData)throws DaoException
{

return this.queryByHql(queryData, null);

}

/**
* 功能:查询数据
* @param queryData 查询数据的HQL语句
* @return List
* @throws DaoException
*/
public List queryByHql(StringBuilder queryData)throws DaoException
{

return this.queryByHql(queryData, null);

}

/**
* 功能:查询数据
* @param queryData 查询数据的HQL语句
* @param params 参数
* @return List
* @throws DaoException
*/
public List queryByHql(String queryData,List params)throws DaoException
{
logger.debug(" queryByHql queryData="+queryData);

this.writeLogger(null, params);

List result=null;

Session session=null;

try{

session=this.getSession();

Query query=session.createQuery(queryData);

this.setParamters(params, query);

result=query.list();

}catch(HibernateException e)
{
this.haveHibernateException("basedao.queryByHql.error", e);

}finally
{

this.closeSession(session);

}

return result;
}

/**
* 功能:查询数据
* @param queryData 查询数据的HQL语句
* @param params 参数
* @return List
* @throws DaoException
*/
public List queryByHql(StringBuilder queryData,List params)throws DaoException
{
return this.queryByHql(queryData.toString(), params);
}

/**
* 功能:执行更新数据的SQL语句
* @param updataSql SQL语句
* @throws DaoException
*/
public void updateBySql(StringBuilder updataSql)throws DaoException
{
this.updateBySql(updataSql,null);
}

/**
* 功能:执行更新数据的SQL语句
* @param updataSql SQL语句
* @param params 参数
* @throws DaoException
*/
public void updateBySql(StringBuilder updataSql,List params)throws DaoException
{
this.updateBySql(updataSql.toString(), params);
}

/**
* 功能:执行更新数据的SQL语句
* @param updataSql SQL语句
* @throws DaoException
*/
public void updateBySql(String updataSql)throws DaoException
{
this.updateBySql(updataSql,null);
}

/**
* 功能:执行更新数据的SQL语句
* @param updataSql SQL语句
* @throws DaoException
*/
public void updateBySql(String updataSql,List params)throws DaoException
{
logger.debug(" updateBySql updataSql="+updataSql);

this.writeLogger(null, params);

Session session=null;

Transaction tr=null;

boolean commitFlag=false;

try{

session=this.getSession();

tr=session.beginTransaction();

tr.begin();

SQLQuery query=session.createSQLQuery(updataSql);

this.setParamters(params, query);

query.executeUpdate();

tr.commit();

commitFlag=true;

}catch(HibernateException e)
{
this.haveHibernateException("basedao.updateBySql.error", e);

}finally
{
this.closeSession(session, tr, commitFlag);
}
}

/**
* 功能:执行更新数据的 HQL语句
* @param updataSql HQL语句
* @throws DaoException
*/
public void updateByHql(StringBuilder updataHql)throws DaoException
{
this.updateByHql(updataHql, null);

}

public void updateByHql(StringBuilder updataHql,List params)throws DaoException
{
this.updateByHql(updataHql.toString(), params);
}

public void updateByHql(String updataHql)throws DaoException
{
this.updateByHql(updataHql, null);

}

public void updateByHql(String updataHql,List params)throws DaoException
{

logger.debug(" updateByHql updataHql="+updataHql);

this.writeLogger(null, params);

Session session=null;

Transaction tr=null;

boolean commitFlag=false;

try{

session=this.getSession();

tr=session.beginTransaction();

tr.begin();

Query query=session.createQuery(updataHql);

this.setParamters(params, query);

query.executeUpdate();

tr.commit();

commitFlag=true;

}catch(HibernateException e)
{
this.haveHibernateException("basedao.updateByHql.error", e);

}finally
{
this.closeSession(session, tr, commitFlag);
}

}

public void setParamters(List params,SQLQuery query)
{
if(params!=null)

for(int i=0;i<params.size();i++)
{
this.setParamter(i,params.get(i), query);
}
}

public void setParamters(List params,Query query)
{
if(params!=null)

for(int i=0;i<params.size();i++)
{
this.setParamter(i,params.get(i), query);
}
}

public void setParamter(int i,Object o ,SQLQuery query)
{
if(o instanceof java.util.Date)
{
query.setTimestamp(i, (java.util.Date)o);

}else
{
query.setParameter(i,o);
}
}

public void setParamter(int i,Object o ,Query query)
{
if(o instanceof java.util.Date)
{
query.setTimestamp(i, (java.util.Date)o);

}else
{
query.setParameter(i,o);
}
}

public void setTurnPageParam(int pageNo,int pageSize,SQLQuery query)
{
if(pageNo>0&&pageSize>0)
{
query.setFirstResult((pageNo-1)*pageSize);
query.setMaxResults(pageSize);
}
}

public void setTurnPageParam(int pageNo,int pageSize,Query query)
{
if(pageNo>0&&pageSize>0)
{
query.setFirstResult((pageNo-1)*pageSize);
query.setMaxResults(pageSize);
}
}

protected int getRowCountNum(List list)
{
int result=0;

try{

result=Integer.parseInt( list.get(0).toString());

}catch(Exception e)
{

}

return result;
}

protected void writeLogger(String messageName,List params)
{
if(messageName==null)

messageName=" params = ";

StringBuilder paramsB=new StringBuilder();

if(params!=null)
{

for(int i=0;i<params.size();i++)
{
if(i>0)
paramsB.append(",");

paramsB.append(this.getParamValue(params.get(i)));

}

logger.debug(messageName+" ="+paramsB.toString());

}else
{
logger.debug(messageName+" is null ");
}

}

protected Object getParamValue(Object o)
{
Object result=o;

if(o instanceof java.util.Date )
{
result=this.fomateDate((java.util.Date)o);
}

return result;
}

protected String fomateDate(Date date)
{
String result="";

try{

java.text.SimpleDateFormat formate=new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

result=formate.format(date);

}catch(Exception e)
{
logger.debug(e.getMessage(), e);
}

return result;
}

public static void main(String []args)
{

Date date=null;

java.text.SimpleDateFormat formate=new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println(formate.format(date) );


}

public Session getSession()
{
return HibernateSessionFactory.getSession();
}

public void closeSession(Session session)
{
if(session!=null&&session.isOpen())

session.close();

session=null;
}

public void closeSession(Session session,Transaction tr,boolean commitFlag)
{
if(!commitFlag&&tr!=null)
{
try{

tr.rollback();
}catch(Exception e)
{
logger.debug(e.getMessage(),e);
}
}

this.closeSession(session);
}

public void haveHibernateException(String key,HibernateException e)
{
new DaoException(logger,key, e);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值