带分页功能的SSH整合,DAO层经典封装
Action:
public class PageManage extends ServiceManage{/*** 分页的一些参数* @author sl*/ private static final long serialVersionUID = 1L;// 以下三个参数是分页需返回 // protected int currentPage = 1; // 当前页数 protected int totalPages; // 总页数 protected int totalRecord; // 总记录数 protected int pageNum = 1; // 当前页数//默认每页的数量 protected int numPerPage = 20; protected PageUtil pageUtil(int totalRecord_) { return new PageUtil(pageNum, totalRecord_, numPerPage); }//一些getset方法 public int getTotalPages() { return totalPages; } public void setTotalPages(int totalPages) { this.totalPages = totalPages; } public int getTotalRecord() { return totalRecord; } public void setTotalRecord(int totalRecord) { this.totalRecord = totalRecord; } public int getPageNum() { return pageNum; } public void setPageNum(int pageNum) { this.pageNum = pageNum; } public int getNumPerPage() { return numPerPage; } public void setNumPerPage(int numPerPage) { this.numPerPage = numPerPage; }}
View Code
其中涉及到的 PageUtil,这就分页的参数设置,和进行分页功能的一些逻辑判断,逻辑变动。
PageUtil:
public class PageUtil{ //分页用到的基本两个参数:1.总的记录条数 2.每页的记录条数 //public static final Integer DEFAULT_CURRENT=1; //默认显示第一页 public static final Integer DEFAULT_PAGE_NUM=20;//默认显示20条记录protected Integer pageFirRecord=0;//当前页第一条记录 protected Integer currentPage=1;//当前页数 protected Integer totalPages;//总页数 protected Integer totalRecord;//总记录数 protected Integer showRecordNum=DEFAULT_PAGE_NUM;//每页显示记录数 protected Integer showPageNum;//当前页显示的记录数量 protected Integer prePage=1; protected Integer nexePage=1; public PageUtil(){}public PageUtil(Integer currentPage,Integer totalRecord){//两个参数,一个是当前页数,一个是总页数this.setTotalRecord(totalRecord);//调用set()方法来将参数赋值 this.setTotalPages(); this.setCurrentPage(currentPage);this.setShowPageNum(); this.setPageFirRecord(); this.setPrePage(); this.setNexePage(); } /*** 重载* @param currentPage* @param totalRecord* @param showRecordNum*/ public PageUtil(Integer currentPage,Integer totalRecord,int showRecordNum){ //showRecordNum:为当前页的总记录条数this.setTotalRecord(totalRecord); this.setShowRecordNum(showRecordNum); this.setTotalPages(); this.setCurrentPage(currentPage);this.setShowPageNum(); this.setPageFirRecord();this.setPrePage();//计算前一页页码 this.setNexePage();//计算下一页页码 } public Integer getPrePage() { return prePage; } public void setPrePage() {//设置前一页的页码 this.prePage = currentPage-1;//为当前页数减1 }public Integer getNexePage() { return nexePage; } public void setNexePage() {if(currentPage==totalPages){ //如果当前页码为总页码,即最后一页 this.nexePage = 0;//返回0 }else{ this.nexePage = currentPage+1;//当前页加1 } if(totalPages==0){//如果总页数为0,怎么返回0; this.nexePage = 0; } }public Integer getShowPageNum() {//返回当前页显示的记录数量 return showPageNum; } public void setShowPageNum() {//当前页显示的记录数量 if(currentPage*showRecordNum-totalRecord>0){//当前页数*每页显示的条数—总的记录条数>0 表示现在已经是最后一页了 this.showPageNum = totalRecord-(currentPage-1)*showRecordNum; }else{ this.showPageNum=showRecordNum; }}public Integer getShowRecordNum() {//返回每页的记录条数 return showRecordNum; } public void setShowRecordNum(Integer showRecordNum) { this.showRecordNum = showRecordNum; }public Integer getTotalPages() {//返回总的页数 return totalPages; } public void setTotalPages() {//计算总页数 if(totalRecord%showRecordNum==0){ this.totalPages = totalRecord/showRecordNum; }else{ this.totalPages = totalRecord/showRecordNum+1; }}public Integer getTotalRecord() {//返回总的记录条数 return totalRecord; } public void setTotalRecord(Integer totalRecord) { this.totalRecord = totalRecord; }public Integer getCurrentPage() {//返回当前的页数 return currentPage; } public void setCurrentPage(Integer currentPage) {if(currentPage==0||currentPage<0){ currentPage=1; } if(currentPage>totalPages&&totalPages!=0){ this.currentPage=totalPages;//当前页大于总页数时为总页数,并且保证不存在记录时不出错,即totalPages!=0 }else if(totalPages==0){ this.currentPage=1; }else{ this.currentPage = currentPage; } }public void setPageFirRecord() {//第一条记录所在集合的标号,比实际排数少一 this.pageFirRecord = (getCurrentPage()-1)*showRecordNum;//第一条记录为当前页的前一页*每页显示的记录数 } public Integer getPageFirRecord() {//返回第一条记录 return pageFirRecord; }}
View Code
然后讲Service层:
public interface AuthApplyS extends CURDS<AuthApply>{
/**
* 根据认证的类型与状态获取相应的认证申请
* */
public List<AuthApply> getApplie(String type, String status, Integer memberId);
}
|
CURDS: 里面的方法是Service共用的方法
public interface CURDS<T> { /*** 根据条件集合大小,这里使用java 1.5引入的新特性:可变参数* */ public int getNums(Object ...args); /*** 根据条件集合* */ public List<T> getList(PageUtil pageUtil, Object ...args); /*** 保存对象* */ public T makePersitent(T entity); /*** 根本编号获得对象* */ public T findById(Integer id); }
View Code
service层实现:
public class AuthApplySI extends DAOManage implements AuthApplyS{public AuthApply findById(Integer id) { return authApplyD.findById(id); }public List<AuthApply> getList(PageUtil pageUtil, Object... args) { return authApplyD.findByPage(getHQL((String)args[0]), pageUtil.getPageFirRecord(), pageUtil.getShowRecordNum()); }public int getNums(Object... args) { return authApplyD.findByPage(getHQL((String)args[0]), 0, 0).size(); }private String getHQL(String type){ StringBuffer hql = new StringBuffer("from AuthApply as auth where auth.authType = '"+type+"'"); hql.append(" and auth.status = '"+AuthCon.SUBMIT_AUTH+"'"); return hql.toString(); }public AuthApply makePersitent(AuthApply entity) { return authApplyD.makePersitent(entity); }public List<AuthApply> getApplie(String type, String status, Integer memberId) { StringBuffer hql = new StringBuffer("from AuthApply as auth where auth.authType = '"+type+"' and auth.status = '"+status+"'"); if(memberId != null){ hql.append(" and auth.member.memberId = "+memberId); } return authApplyD.findByPage(hql.toString(), 0, 0).size() == 0? null: authApplyD.findByPage(hql.toString(), 0, 0); }}
View Code
下面看一下 DAO层的封装吧。
public interface AuthApplyD extends GenericDAO<AuthApply>{
}
|
public class AuthApplyDI extends GenericHibernateDAO<AuthApply> implements AuthApplyD{public AuthApplyDI() { super(AuthApply.class);//这super,就是调用父类的构造方法 }} View Code |
GenericDAO接口封装:
/**** @param <T>*/public interface GenericDAO <T>{ /*** 通过ID获得实体对象* * @param id实体对象的标识符* @return 该主键值对应的实体对象*/ T findById(Integer id); T findById(Long id); /*** 将实体对象持久化* * @param entity 需要进行持久化操作的实体对象* @return 持久化的实体对象*/ T makePersitent(T entity); /*** 将实体变为瞬态* * @param entity需要转变为瞬态的实体对象*/ void makeTransient(T entity);/*** 将一系列的实体变为瞬态,使用本地sql* * @param hql*/ void makeTransientByIds(String sql);/*** * 使用hql语句进行分页操作* * @param hql* @param offset第一条记录索引* @param pageSize每页需要显示的记录数* @return查询的记录*/ List<T> findByPage(final String hql,final int offset,final int pageSize);/*** 使用hql 语句进行分页查询操作* * @param hql 需要查询的hql语句* @param value 如果hql有一个参数需要传入,value就是传入的参数* @param offset 第一条记录索引* @param pageSize 每页需要显示的记录数* @return 当前页的所有记录*/ List<T> findByPage(final String hql , final Object value ,final int offset, final int pageSize);/*** 使用hql 语句进行分页查询操作* * @param hql 需要查询的hql语句* @param values 如果hql有一个参数需要传入,value就是传入的参数* @param offset 第一条记录索引* @param pageSize 每页需要显示的记录数* @return 当前页的所有记录*/ List<T> findByPage(final String hql, final Object[] values,final int offset, final int pageSize);/*** 使用sql 语句进行分页查询操作* * @param sql* @param offset* @param pageSize* @return*/ List<T> findByPageSQL(final String sql, final int offset, final int pageSize);/*** 根据语句查找总数* @param hql hql语句* @return 对应的数目*/ Integer getCount(String hql);void updateObj(final String hql,final Object[] values); /*** 更新* */ void updateEntity(T entity); /*** 返回list集合* */ @SuppressWarnings("unchecked") public List getListDataByHQL(String hql); /*** hql查询单个字段* */ public List<Object> findSingleDataByHQL(String hql); /*** hql查询多个字段* */ public List<Object[]> findSomeDataByHQL(String hql); }
View Code
public class GenericHibernateDAO<T> extends HibernateDaoSupport implements GenericDAO<T>{private Class<T> persistentClass;public GenericHibernateDAO(Class<T> persistentClass){ this.persistentClass=persistentClass; }public Class<T> getPersistentClass(){ return persistentClass; }public T findById(Integer id) { return (T)getHibernateTemplate().get(getPersistentClass(), id); }@SuppressWarnings("unchecked") public List<T> findByPage(final String hql, final int offset, final int pageSize){ if(hql == null){ return new ArrayList<T>(); } List<T> list= getHibernateTemplate().executeFind(new HibernateCallback(){ public Object doInHibernate(final Session session) throws HibernateException, SQLException{ Query query=session.createQuery(hql); if(!(offset==0 && pageSize==0)){ query.setFirstResult(offset).setMaxResults(pageSize); } List<T> result = query.list(); return result; } }); return list; }@SuppressWarnings("unchecked") public List findByPageSQL(final String sql, final int offset, final int pageSize){ List list= getHibernateTemplate().executeFind(new HibernateCallback(){ public Object doInHibernate(final Session session) throws HibernateException, SQLException{ Query query=session.createSQLQuery(sql); if(!(offset==0 && pageSize==0)){ query.setFirstResult(offset).setMaxResults(pageSize); } List result = query.list(); return result; } }); return list; }@SuppressWarnings("unchecked") public List<T> findByPage(final String hql, final Object value, final int offset, final int pageSize) { List<T> list = getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query=session.createQuery(hql).setParameter(0, value); if(!(offset==0 && pageSize==0)){ query.setFirstResult(offset).setMaxResults(pageSize); } List<T> result = query.list(); return result; } }); return list; }@SuppressWarnings("unchecked") public List<T> findByPage(final String hql, final Object[] values, final int offset, final int pageSize) { List<T> list = getHibernateTemplate().executeFind(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException{ Query query=session.createQuery(hql); for (int i = 0 ; i < values.length ; i++){ query.setParameter( i, values[i]); } if(!(offset==0 && pageSize==0)){ query.setFirstResult(offset).setMaxResults(pageSize); } List<T> result = query.list(); return result; } }); return list; }@SuppressWarnings("unchecked") public void updateObj(final String hql, final Object[] values) { getHibernateTemplate().execute(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException{ Query query=session.createQuery(hql); for(int i=0;i<values.length;i++){ query.setParameter( i, values[i]); } query.executeUpdate(); return null; } }); }public Integer getCount(String hql) { Integer count; //iterate方法与list方法的区别是list取出全部,iterator取出主键,迭代的时候才取出数据 count = ((Long)getHibernateTemplate().iterate(hql).next()).intValue(); System.out.println("大小"+ count); return count; }public T makePersitent(T entity) { getHibernateTemplate().saveOrUpdate(entity); return entity; }public void makeTransient(T entity) { getHibernateTemplate().delete(entity); }@SuppressWarnings("unchecked") public void makeTransientByIds(final String sql) { getHibernateTemplate().execute(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException{ Query query=session.createQuery(sql); query.executeUpdate(); return null; } }); }public T findById(Long id) { return (T) getHibernateTemplate().get(getPersistentClass(), id); }public void updateEntity(T entity) { this.getHibernateTemplate().update(entity); } @SuppressWarnings("unchecked") public List getListDataByHQL(String hql) { return getHibernateTemplate().find(hql); }/*** hql查询单个字段* */ @SuppressWarnings("unchecked") public List<Object> findSingleDataByHQL(String hql) { return getHibernateTemplate().find(hql); } /*** hql查询多个字段* */ @SuppressWarnings("unchecked") public List<Object[]> findSomeDataByHQL(String hql) { return getHibernateTemplate().find(hql); } }
View Code
希望首页能再次通过,我修改下。
转载于:https://www.cnblogs.com/Alandre/p/3366557.html
带分页功能的SSH整合,DAO层经典封装相关推荐
- jsp自定义图文新闻列表标签结合ssh2,带分页功能
jsp自定义图文新闻列表标签结合ssh2,带分页功能(欢迎大家讨论指点,共同进步) 1.service层 (模拟返回数据) package com.mingda.service.impl;import ...
- php tp框架分页源代码,ThinkPHP3.2框架自带分页功能实现方法示例
本文实例讲述了ThinkPHP3.2框架自带分页功能实现方法.分享给大家供大家参考,具体如下: 1.前端-分页代码: {$page} 2.创建分页样式:如page.css 并将以下代码复制到该文件中 ...
- android gridview分页显示,GridView使用自带分页功能时分页方式及样式PagerStyle
GridView分页,使用自带分页功能,类似下面样式: 在aspx页面中,GridView上的PagerStyle下CssClass属性,设置为bubufxPagerCss,具体aspx页面代码: A ...
- dao层通用封装_DAO层–救援通用
dao层通用封装 泛型可以是使用编译时验证(类型安全性)的功能来创建可重用代码的强大工具. 不幸的是,我感到主流开发人员仍然对此感到恐惧. 但是,比喻海格的蜘蛛,我会说,泛型是被严重误解的生物--:- ...
- dao层通用封装_层超类型模式:封装多层系统中的通用实现
dao层通用封装 Being one of the cornerstones of OOP, Inheritance is pretty much like a doubled-sided door ...
- java分页封装到dao层,Node Dao层的封装与分页
传统的写法/** * Created by 黄森 on 2017/7/22. */var express = require('express');var app = express();var Mo ...
- 自定义repeater带分页功能的DataGrid(仿PetShop)
第一步:新建控件库 代码 using System; using System.Collections; using System.Collections.Generic; using System. ...
- 简单来说一下java中的泛型,ssh中dao层使用会简化代码量
原来仅仅是听老师说泛型特别好用,但是后来一直弄android用的泛型就比較少了.但是感觉它真的非常重要,于是花了一下午的时间写了个demo.好,老规矩.上代码: 首先,sysout是个工具,可是用着不 ...
- (转)淘淘商城系列——SSM框架整合之Dao层整合
http://blog.csdn.net/yerenyuan_pku/article/details/72721093 一个项目中往往有三层即Dao层.Service层和Web层,看标题就知道了,本文 ...
最新文章
- SQL case when
- WindowsServer2012史记7-茴香豆的五种写法和四种”显示计算机”的方法
- Java 加密 AES 对称加密算法
- [js] 举例说明面向对象编程有什么缺点?
- 第五周作业:瀑布模型
- java 将bean转化为map,将javabean转化为map对象
- cf1042d 树状数组逆序对+离散化
- 利用SQLite在android上实现增删改查
- 网易2019校招笔试题-瞌睡
- 软件Hspice基础知识学习笔记(1)
- 20省“十四五”5G发展规划全文发布!(限时下载)
- 编程实现恩格玛加密机(C++)
- 屏幕录像专家限制录像时长_屏幕录像档案已更新!
- Redis 的过期策略是如何实现的?
- 基于单片机的CO2温湿度电路设计(#0217)
- canvas二次、三次贝赛尔曲线 绘制气泡圆角矩形立体桃心
- spdlog 代码分析
- mysql存储图片的几种方式_PHPmysql存储照片的两种方式
- 业务:客户关系管理(CRM)业务介绍
- SHELL体系知识I
热门文章
- C#值类型以及默认值记录下
- Selenium备忘手册 [转]
- redhat/centos 搭建svn服务器环境
- java 8 update 11_从Java 8升级到Java 11应该注意的问题
- CENTOS 7 踢用户_从零学ELK系列(三):Centos安装Docker(超详细图文教程)
- java remove(index)_方法removeElementAt(int index)在Java中做什么?
- 数据智能是未来商业的核心竞争力之一
- go token验证_registry v2 解析以及如何实现token验证
- 友盟U-share sdk 分享的接入(支持Android及IOS)
- java实现bean实体与map集合相互转换