《ibatis操作 模板基类设计 实现所有的增删改查分页.docx》由会员分享,可在线阅读,更多相关《ibatis操作 模板基类设计 实现所有的增删改查分页.docx(15页珍藏版)》请在冰豆网上搜索。
*DAO所管理的Entity类型.
*在构造函数中将泛型T.class赋给entityClass.
*根据ID获取对象.
*取得entityClass.
entityClass,重载此函数达到相同效果。*/
protectedClassgetEntityClass(){
returnentityClass;
}
publicStringgetIdName(Classclazz){
return"id";
}
/**
*分页查询.
*/
publicPagepagedQuery(MapparameterObject,intstart,intlimit){
returnpagedQuery(getEntityClass(),parameterObject,start,limit);
}
/**
*分页查询.
*/
publicPagepagedQuery(MapparameterObject,intstart,intlimit,
StringcountSqlId,StringpageQuerySqlId){
if(StringUtils.isNotBlank(pageQuerySqlId))
returnpagedQuery(getEntityClass(),parameterObject,start,limit,
countSqlId,pageQuerySqlId);
else{
returnpagedQuery(getEntityClass(),parameterObject,start,limit);
}
}
/**
*根据ID移除对象.
*/
publicvoiddeleteByPrimarykey(Serializableid){
removeById(getEntityClass(),id);
}
/**
*保存对象.为了实现IEntityDao我在内部使用了insert和upate2个方法.
*/
publicvoidinsert(To){
super._insert(o);
}
publicvoidsetPrimaryKeyName(StringprimaryKeyName){
this.primaryKeyName=primaryKeyName;
}
publicListqueryForList(StringstatementId,Objectparameters){
returnsuper.queryForList(getEntityClass(),statementId,parameters);
}
publicTqueryForObject(StringstatementId,Objectparameters){
returnsuper.queryForObject(getEntityClass(),statementId,parameters);
}
publicvoidupdate(StringstatementId,Objectparameters){
super.update(getEntityClass(),statementId,parameters);
}
publicvoidupdate(To){
super._update(o);
}
}
IbatisGenericDao类内容如下:
/**
*(#)IbatisGenericDao.java1.02008-6-7上午09:
20:
13
*
*/
packagecom.keyi.util.dao;
importjava.io.Serializable;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
importorg.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
importorg.springframework.util.Assert;
importcom.keyi.util.page.Page;
@SuppressWarnings("unchecked")
publicclassIbatisGenericDaoextendsSqlMapClientDaoSupport{
publicstaticfinalStringPOSTFIX_INSERT=".insert";
publicstaticfinalStringPOSTFIX_UPDATE=".update";
publicstaticfinalStringPOSTFIX_DELETE=".delete";
publicstaticfinalStringPOSTFIX_DELETE_PRIAMARYKEY=".deleteByPrimaryKey";
publicstaticfinalStringPOSTFIX_SELECT=".select";
publicstaticfinalStringPOSTFIX_GETALL=".getAll";
publicstaticfinalStringPOSTFIX_SELECTMAP=".selectByMap";
publicstaticfinalStringPOSTFIX_SELECTSQL=".selectBySql";
publicstaticfinalStringPOSTFIX_COUNT=".count";
publicstaticfinalStringPOSTFIX_QUERY=".query";
/**
*根据ID获取对象
*/
publicTget(ClassentityClass,Serializableid){
To=(T)getSqlMapClientTemplate().queryForObject(
getStatementId(entityClass,IbatisGenericDao.POSTFIX_SELECT),
id);
returno;
}
/**
*新增对象
*/
publicvoid_insert(Objecto){
getSqlMapClientTemplate().insert(
getStatementId(o.getClass(),IbatisGenericDao.POSTFIX_INSERT),
o);
}
/**
*保存对象
*/
publicvoid_update(Objecto){
getSqlMapClientTemplate().update(
getStatementId(o.getClass(),IbatisGenericDao.POSTFIX_UPDATE),
o);
}
/**
*根据ID删除对象
*/
publicvoidremoveById(ClassentityClass,Serializableid){
getSqlMapClientTemplate().delete(
getStatementId(entityClass,
IbatisGenericDao.POSTFIX_DELETE_PRIAMARYKEY),id);
}
/**
*分页查询函数,使用PaginatedList.
*
*@paramstart
*@paramlimit@return含记录数和当前页数据的Page对象.
*/
publicPagepagedQuery(ClassentityClass,MapparameterObject,intstart,
intlimit){
Assert.isTrue(start>=0,"pageNoshouldstartfrom0");
//计算总数
IntegertotalCount=(Integer)getSqlMapClientTemplate()
.queryForObject(
getStatementId(entityClass,
IbatisGenericDao.POSTFIX_COUNT),
parameterObject);
//如果没有数据则返回EmptyPage
Assert.notNull(totalCount,"totalCountError");
if(totalCount.intValue()==0){
returnnewPage();
}
Listlist;
inttotalPageCount=0;
intstartIndex=0;
//如果pageSize小于0,则返回所有数捄1177,等同于getAll
if(limit>0){
//计算页数
totalPageCount=(totalCount/limit);
totalPageCount+=((totalCount%limit)>0)?
1:
0;
//计算skip数量
if(totalCount>start){
startIndex=start;
}else{
startIndex=(totalPageCount-1)*limit;
}
if(parameterObject==null)
parameterObject=newHashMap();
parameterObject.put("startIndex",startIndex);
parameterObject.put("endIndex",limit);
list=getSqlMapClientTemplate()
.queryForList(
getStatementId(entityClass,
IbatisGenericDao.POSTFIX_QUERY),
parameterObject);
}else{
list=getSqlMapClientTemplate()
.queryForList(
getStatementId(entityClass,
IbatisGenericDao.POSTFIX_QUERY),
parameterObject);
}
returnnewPage(startIndex,totalCount,limit,list);
}
/**
*分页查询函数,使用PaginatedList.
*
*@paramstart
*@paramlimit@return含记录数和当前页数据的Page对象.
*/
publicPagepagedQuery(ClassentityClass,MapparameterObject,intstart,
intlimit,StringcountSqlId,StringpageQuerySqlId){
Assert.isTrue(start>=0,"pageNoshouldstartfrom0");
//计算总数
IntegertotalCount=(Integer)getSqlMapClientTemplate()
.queryForObject(
getStatementId(entityClass,
countSqlId),
parameterObject);
//如果没有数据则返回EmptyPage
Assert.notNull(totalCount,"totalCountError");
if(totalCount.intValue()==0){
returnnewPage();
}
Listlist;
inttotalPageCount=0;
intstartIndex=0;
//如果pageSize小于0,则返回所有数捄1177,等同于getAll
if(limit>0){
//计算页数
totalPageCount=(totalCount/limit);
totalPageCount+=((totalCount%limit)>0)?
1:
0;
//计算skip数量
if(totalCount>=start){
startIndex=start;
}else{
startIndex=(totalPageCount-1)*limit;
}
if(parameterObject==null)
parameterObject=newHashMap();
parameterObject.put("startIndex",startIndex);
parameterObject.put("endIndex",limit);
list=getSqlMapClientTemplate()
.queryForList(
getStatementId(entityClass,
pageQuerySqlId),
parameterObject);
}else{
list=getSqlMapClientTemplate()
.queryForList(
getStatementId(entityClass,
pageQuerySqlId),
parameterObject);
}
returnnewPage(startIndex,totalCount,limit,list);
}
/**
*getstatementidinSQLMapfile
*
*@paramentityClass
*entityclass
*@paramsuffix
*suffix
*@returnstatementid
*/
privateStringgetStatementId(ClassentityClass,Stringsuffix){
StringclassName=entityClass.getName();
StringshortName=className.replace(entityClass.getPackage().getName()
+".","");
returnshortName+suffix;
}
publicListqueryForList(ClassentityClass,StringstatementId,
Objectparameters){
returngetSqlMapClientTemplate().queryForList(
getStatementId(entityClass,statementId),parameters);
}
publicTqueryForObject(ClassentityClass,StringstatementId,
Objectparameters){
return(T)getSqlMapClientTemplate().queryForObject(
getStatementId(entityClass,statementId),parameters);
}
publicvoidupdate(ClassentityClass,StringstatementId,Objectparameters){
getSqlMapClientTemplate().update(
getStatementId(entityClass,statementId),parameters);
}
}
GenericsUtils类内容如下:
/**
*(#)GenericsUtils.java1.02008-6-7上午09:
26:
43
*
*/
packagecom.keyi.util.dao;
importjava.lang.reflect.ParameterizedType;
importjava.lang.reflect.Type;
importmons.logging.Log;
importmons.logging.LogFactory;
@SuppressWarnings("unchecked")
publicclassGenericsUtils{
privatestaticfinalLoglog=LogFactory.getLog(GenericsUtils.class);
privateGenericsUtils(){
}
publicstaticClassgetSuperClassGenricType(Classclazz){
returngetSuperClassG