带分页功能的SSH整合DAO层经典封装.docx
- 文档编号:3780277
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:26
- 大小:22.91KB
带分页功能的SSH整合DAO层经典封装.docx
《带分页功能的SSH整合DAO层经典封装.docx》由会员分享,可在线阅读,更多相关《带分页功能的SSH整合DAO层经典封装.docx(26页珍藏版)》请在冰豆网上搜索。
带分页功能的SSH整合DAO层经典封装
任何一个封装讲究的是,使用,多状态。
Action:
任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数。
并根据这个参数进行查值。
然后在继承ServiceManage,ServiceManage类是用来存放共用的东西:
response,重要的是Service的getset
具体讲一下PageManage,
totalPages;//总页数
totalRecord;//总记录数
showRecordNum=DEFAULT_PAGE_NUM;//每页显示记录数
showPageNum;//当前页显示的记录数量
publicclassPageManageextendsServiceManage{
/**
*分页的一些参数
*@authorsl
*/
privatestaticfinallongserialVersionUID=1L;
//以下三个参数是分页需返回
//protectedintcurrentPage=1;//当前页数
protectedinttotalPages;//总页数
protectedinttotalRecord;//总记录数
protectedintpageNum=1;//当前页数
//默认每页的数量
protectedintnumPerPage=20;
protectedPageUtilpageUtil(inttotalRecord_){
returnnewPageUtil(pageNum,totalRecord_,numPerPage);
}
//一些getset方法
publicintgetTotalPages(){
returntotalPages;
}
publicvoidsetTotalPages(inttotalPages){
this.totalPages=totalPages;
}
publicintgetTotalRecord(){
returntotalRecord;
}
publicvoidsetTotalRecord(inttotalRecord){
this.totalRecord=totalRecord;
}
publicintgetPageNum(){
returnpageNum;
}
publicvoidsetPageNum(intpageNum){
this.pageNum=pageNum;
}
publicintgetNumPerPage(){
returnnumPerPage;
}
publicvoidsetNumPerPage(intnumPerPage){
this.numPerPage=numPerPage;
}
}
ViewCode
其中涉及到的 PageUtil,这就分页的参数设置,和进行分页功能的一些逻辑判断,逻辑变动。
PageUtil:
PageUtil(IntegercurrentPage,IntegertotalRecord,intshowRecordNum)这个定义了一个page以后调用就这个。
//分页用到的基本两个参数:
1.总的记录条数 2.每页的记录条数
DEFAULT_CURRENT=1; //默认显示第一页
DEFAULT_PAGE_NUM=20;//默认显示20条记录
pageFirRecord=0;//当前页第一条记录
currentPage=1;//当前页数
totalPages;//总页数
totalRecord;//总记录数
showRecordNum=DEFAULT_PAGE_NUM;//每页显示记录数
showPageNum;//当前页显示的记录数量
prePage=1;
nexePage=1;
publicclassPageUtil{
//分页用到的基本两个参数:
1.总的记录条数2.每页的记录条数
//publicstaticfinalIntegerDEFAULT_CURRENT=1;//默认显示第一页
publicstaticfinalIntegerDEFAULT_PAGE_NUM=20;//默认显示20条记录
protectedIntegerpageFirRecord=0;//当前页第一条记录
protectedIntegercurrentPage=1;//当前页数
protectedIntegertotalPages;//总页数
protectedIntegertotalRecord;//总记录数
protectedIntegershowRecordNum=DEFAULT_PAGE_NUM;//每页显示记录数
protectedIntegershowPageNum;//当前页显示的记录数量
protectedIntegerprePage=1;
protectedIntegernexePage=1;
publicPageUtil(){
}
publicPageUtil(IntegercurrentPage,IntegertotalRecord){//两个参数,一个是当前页数,一个是总页数
this.setTotalRecord(totalRecord);//调用set()方法来将参数赋值
this.setTotalPages();
this.setCurrentPage(currentPage);
this.setShowPageNum();
this.setPageFirRecord();
this.setPrePage();
this.setNexePage();
}
/**
*重载
*@paramcurrentPage
*@paramtotalRecord
*@paramshowRecordNum
*/
publicPageUtil(IntegercurrentPage,IntegertotalRecord,intshowRecordNum){//showRecordNum:
为当前页的总记录条数
this.setTotalRecord(totalRecord);
this.setShowRecordNum(showRecordNum);
this.setTotalPages();
this.setCurrentPage(currentPage);
this.setShowPageNum();
this.setPageFirRecord();
this.setPrePage();//计算前一页页码
this.setNexePage();//计算下一页页码
}
publicIntegergetPrePage(){
returnprePage;
}
publicvoidsetPrePage(){//设置前一页的页码
this.prePage=currentPage-1;//为当前页数减1
}
publicIntegergetNexePage(){
returnnexePage;
}
publicvoidsetNexePage(){
if(currentPage==totalPages){//如果当前页码为总页码,即最后一页
this.nexePage=0;//返回0
}else{
this.nexePage=currentPage+1;//当前页加1
}
if(totalPages==0){//如果总页数为0,怎么返回0;
this.nexePage=0;
}
}
publicIntegergetShowPageNum(){//返回当前页显示的记录数量
returnshowPageNum;
}
publicvoidsetShowPageNum(){//当前页显示的记录数量
if(currentPage*showRecordNum-totalRecord>0){//当前页数*每页显示的条数—总的记录条数>0表示现在已经是最后一页了
this.showPageNum=totalRecord-(currentPage-1)*showRecordNum;
}else{
this.showPageNum=showRecordNum;
}
}
publicIntegergetShowRecordNum(){//返回每页的记录条数
returnshowRecordNum;
}
publicvoidsetShowRecordNum(IntegershowRecordNum){
this.showRecordNum=showRecordNum;
}
publicIntegergetTotalPages(){//返回总的页数
returntotalPages;
}
publicvoidsetTotalPages(){//计算总页数
if(totalRecord%showRecordNum==0){
this.totalPages=totalRecord/showRecordNum;
}else{
this.totalPages=totalRecord/showRecordNum+1;
}
}
publicIntegergetTotalRecord(){//返回总的记录条数
returntotalRecord;
}
publicvoidsetTotalRecord(IntegertotalRecord){
this.totalRecord=totalRecord;
}
publicIntegergetCurrentPage(){//返回当前的页数
returncurrentPage;
}
publicvoidsetCurrentPage(IntegercurrentPage){
if(currentPage==0||currentPage<0){
currentPage=1;
}
if(currentPage>totalPages&&totalPages!
=0){
this.currentPage=totalPages;//当前页大于总页数时为总页数,并且保证不存在记录时不出错,即totalPages!
=0
}elseif(totalPages==0){
this.currentPage=1;
}else{
this.currentPage=currentPage;
}
}
publicvoidsetPageFirRecord(){//第一条记录所在集合的标号,比实际排数少一
this.pageFirRecord=(getCurrentPage()-1)*showRecordNum;//第一条记录为当前页的前一页*每页显示的记录数
}
publicIntegergetPageFirRecord(){//返回第一条记录
returnpageFirRecord;
}
}
ViewCode
然后讲Service层:
只要继承一个父类CURDS;CURDS类里面的方法和封装好的DAO层hibernate带分页的分装方法一致
随便一个service层接口:
一般的方法自然都在CURDS有了。
以下是写一个特殊的方法
List
所以一般来说,CURDS里面的方法够用了。
publicinterfaceAuthApplySextendsCURDS
/**
*根据认证的类型与状态获取相应的认证申请
**/
publicList
}
CURDS:
里面的方法是Service共用的方法
/**
*根据条件集合大小,这里使用java1.5引入的新特性:
可变参数
**/
publicintgetNums(Object...args);
/**
*根据条件集合
**/
publicList
/**
*保存对象
**/
publicTmakePersitent(Tentity);
/**
*根本编号获得对象
**/
publicTfindById(Integerid);
publicinterfaceCURDS
/**
*根据条件集合大小,这里使用java1.5引入的新特性:
可变参数
**/
publicintgetNums(Object...args);
/**
*根据条件集合
**/
publicList
/**
*保存对象
**/
publicTmakePersitent(Tentity);
/**
*根本编号获得对象
**/
publicTfindById(Integerid);
}
ViewCode
service层实现:
共用的CURDS接口里面的方法里面如果要用就实现,不用不需要
DAOManage:
只是DAO接口的注入
publicclassAuthApplySIextendsDAOManageimplementsAuthApplyS{
publicAuthApplyfindById(Integerid){
returnauthApplyD.findById(id);
}
publicList
returnauthApplyD.findByPage(getHQL((String)args[0]),pageUtil.getPageFirRecord(),pageUtil.getShowRecordNum());
}
publicintgetNums(Object...args){
returnauthApplyD.findByPage(getHQL((String)args[0]),0,0).size();
}
privateStringgetHQL(Stringtype){
StringBufferhql=newStringBuffer("fromAuthApplyasauthwhereauth.authType='"+type+"'");
hql.append("andauth.status='"+AuthCon.SUBMIT_AUTH+"'");
returnhql.toString();
}
publicAuthApplymakePersitent(AuthApplyentity){
returnauthApplyD.makePersitent(entity);
}
publicList
StringBufferhql=newStringBuffer("fromAuthApplyasauthwhereauth.authType='"+type+"'andauth.status='"+status+"'");
if(memberId!
=null){
hql.append("andauth.member.memberId="+memberId);
}
returnauthApplyD.findByPage(hql.toString(),0,0).size()==0?
null:
authApplyD.findByPage(hql.toString(),0,0);
}
}
ViewCode
下面看一下DAO层的封装吧。
经典的终于来了。
前面注意分页的那些类:
首先因为有一些是特殊的方法,所以我们也要定义
AuthApplyD接口:
很简单吧。
AuthApply是bean类
GenericDAO 这继承的父类就是我们的封装。
publicinterfaceAuthApplyDextendsGenericDAO
}
AuthApplyD实现类:
super(AuthApply.class);这个方法很重要,调用的是GenericHibernateDAO的方法,而将Bean类传到DAO层。
publicclassAuthApplyDIextendsGenericHibernateDAO
AuthApplyD{
publicAuthApplyDI(){
super(AuthApply.class);//这super,就是调用父类的构造方法
}
}
ViewCode
GenericDAO接口封装:
这才是我想说的经典
/**
*通过ID获得实体对象
*
*@paramid实体对象的标识符
*@return该主键值对应的实体对象
*/
TfindById(Integerid);
TfindById(Longid);
/**
*将实体对象持久化
*
*@paramentity需要进行持久化操作的实体对象
*@return持久化的实体对象
*/
TmakePersitent(Tentity);
/**
*将实体变为瞬态
*
*@paramentity需要转变为瞬态的实体对象
*/
voidmakeTransient(Tentity);
/**
*将一系列的实体变为瞬态,使用本地sql
*
*@paramhql
*/
voidmakeTransientByIds(Stringsql);
/**
*
*使用hql语句进行分页操作
*
*@paramhql
*@paramoffset第一条记录索引
*@parampageSize每页需要显示的记录数
*@return查询的记录
*/
List
/**
*使用hql语句进行分页查询操作
*
*@paramhql需要查询的hql语句
*@paramvalue如果hql有一个参数需要传入,value就是传入的参数
*@paramoffset第一条记录索引
*@parampageSize每页需要显示的记录数
*@return当前页的所有记录
*/
List
finalintoffset,finalintpageSize);
/**
*使用hql语句进行分页查询操作
*
*@paramhql需要查询的hql语句
*@paramvalues如果hql有一个参数需要传入,value就是传入的参数
*@paramoffset第一条记录索引
*@parampageSize每页需要显示的记录数
*@return当前页的所有记录
*/
List
finalintoffset,finalintpageSize);
/**
*使用sql语句进行分页查询操作
*
*@paramsql
*@paramoffset
*@parampageSize
*@return
*/
List
finalintoffset,finalintpageSize);
/**
*根据语句查找总数
*@paramhqlhql语句
*@return对应的数目
*/
IntegergetCount(Stringhql);
voidupdateObj(finalStringhql,finalObject[]values);
/**
*更新
**/
voidupdateEntity(Tentity);
/**
*返回list集合
**/
@SuppressWarnings("unchecked")
publicListgetListDataByHQL(Stringhql);
/**
*hql查询单个字段
**/
publicList
/**
*hql查询多个字段
**/
publicList
}
/**
*
*@param
*/
publicinterfaceGenericDAO
/**
*通过ID获得实体对象
*
*@paramid实体对象的标识符
*@return该主键值对应的实体对象
*/
TfindById(Integerid);
TfindById(Longid);
/**
*将实体对
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分页 功能 SSH 整合 DAO 经典 封装