- 浏览: 250759 次
- 性别:
- 来自: 海口市
文章分类
最新评论
-
fanhang116:
学习了一下。操作了一下。感慨了一下。还行。。1
Oracle数据库导入导出方法 -
月影无痕:
经过测试,这是无效的,遇到中文就会出现问题但是英文是可以的。
用JS如何把utf8转换成GBK的字符编码 -
enilu:
不错,呵呵
Intellij IDEA 比较慢的问题 -
renchunli:
精彩精彩精彩精彩精彩精彩
Intellij IDEA 比较慢的问题 -
luogl:
不知道 dwr是如何处理javascript调用服务器上的ja ...
dwr
分页有2种办法:
1、 从数据库中取得记录,在内存中再划分,如果遇到记录数很大的时候效率很成问题,此法不可取。
2、 采用hibernate的物理分页,每次只是取一页。从客户端传进来的是第几页和每页多少条记录,要首先查询符合记录的总记录数,再根据总记录数和当前页,每页记录数可以算出要取的是数据库中的第几条记录。2次查询不可避免了。
单元测试如下:java 代码
- public final void testFindAllRole() {
- logger.debug("testFindAllRole");
- long l1=System.currentTimeMillis();
- String myaction="roleList.do";
- String curPageNO = "1";
- CriteriaQuery cq=new CriteriaQuery(Role.class,curPageNO,myaction);
- cq.setPageSize(10);
- PageSupport ps=BeanFactory.getInstance().getRightDelegate().findAllRole(cq, state);
- long l2=System.currentTimeMillis();
- AppUtils.printCollection(ps.getResultList());
- System.out.println("一共用时为 : "+(l2-l1));
- }
CriteriaQuery类是对hibernate QBC查询方法的封装,需要的参数是当前操作的实体类,myaction,curPageNO,pageSize,以便构造出相应的上下翻页的工具条。
在delegate中只是将值向下传:
java 代码
- public PageSupport findAllRole(CriteriaQuery cq, IState state) {
- if (DelegateUtil.isNullParam(cq, "CriteriaQuery", state)) {
- return null;
- }
- Request req = new Request();
- req.setServiceName(ServiceConsts.FindAllRoleProcessor);
- req.setValue("CriteriaQuery", cq);
- try {
- Response resp = getDelegate().execute(req);
- DelegateUtil.setIState(state, resp);
- return (PageSupport) (resp.getValue("PageSupport"));
- } catch (Exception e) {
- DelegateUtil.handleException(e, "findAllRole", state);
- }
- return new PageSupport();
- }
java 代码
- public class FindAllRole extends Command
- {
- private RoleDao dao;
- public void setDao(RoleDao dao) {
- this.dao = dao;
- }
- public void execute(Map params, Map response) throws Exception
- {
- response.put("PageSupport", (PageSupport)dao.find((CriteriaQuery) params.get("CriteriaQuery"),true));
- }
- ……
- }
java 代码
- public PageSupport find(final CriteriaQuery cq,final boolean isOffset) {
- return (PageSupport)getHibernateTemplate().execute(
- new HibernateCallback() {
- public Object doInHibernate(Session session) throws HibernateException, SQLException {
- Criteria criteria = cq.getDetachedCriteria().getExecutableCriteria(session);
- //得到总行数
- int allCounts = ((Integer) criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue();
- criteria.setProjection(null);//还原
- int curPageNO = PagerUtil.getCurPageNO(cq.getCurPage());// 当前页
- int offset = PagerUtil.getOffset(allCounts, curPageNO, cq.getPageSize());
- String toolBar = PagerUtil.getBar(cq.getMyaction(),allCounts,curPageNO,cq.getPageSize());
- if(isOffset){
- criteria.setFirstResult(offset);
- criteria.setMaxResults(cq.getPageSize());
- }
- return new PageSupport(criteria.list(),toolBar,offset,curPageNO);
- }
- }
- ,true);
- }
在后台的整个操作中非常简练,只需要将带上参数的CriteriaQuery传到dao就可以实现。CriteriaQuery封装了hibernate的DetachedCriteria。
java 代码
- public class CriteriaQuery implements Serializable{
- public CriteriaQuery(){
- super();
- }
- private static final long serialVersionUID = -1464383406564081554L;
- // 初始化list
- private String curPage=null ;
- private int pageSize=10;
- private String myaction;
- private String myform;
- private CriterionList criterionList;
- private DetachedCriteria detachedCriteria;
- public CriteriaQuery(Class c) {
- this.criterionList = new CriterionList();
- this.detachedCriteria=DetachedCriteria.forClass(c);
- }
- public CriteriaQuery(Class c,String curPage,String myaction,String myform) {
- this.myaction=myaction;
- this.myform=myform;
- this.curPage=curPage;
- this.criterionList = new CriterionList();
- this.detachedCriteria=DetachedCriteria.forClass(c);
- }
- public CriteriaQuery(Class c,String curPage,String myaction) {
- this.myaction=myaction;
- this.curPage=curPage;
- this.criterionList = new CriterionList();
- this.detachedCriteria=DetachedCriteria.forClass(c);
- }
- public CriterionList getCriterionList() {
- return criterionList;
- }
- public void setCriterionList(CriterionList criterionList) {
- this.criterionList = criterionList;
- }
- public String getCurPage() {
- return curPage;
- }
- public void setCurPage(String curPage) {
- this.curPage = curPage;
- }
- public DetachedCriteria getDetachedCriteria() {
- return detachedCriteria;
- }
- public void setDetachedCriteria(DetachedCriteria detachedCriteria) {
- this.detachedCriteria = detachedCriteria;
- }
- public void add(Criterion c) {
- detachedCriteria.add(c);
- }
- public void add() {
- for(int i=0;i
- add(getCriterionList().getParas(i));
- }
- }
- public void createAlias(String name){
- detachedCriteria.createCriteria(name);
- }
- public void createAlias(String name,String value){
- detachedCriteria.createCriteria(name,value);
- }
- public Criterion and(CriteriaQuery query, int source, int dest) {
- return Restrictions.and(query.getCriterionList().getParas(source),query.getCriterionList().getParas(dest));
- }
- public Criterion and(Criterion c,CriteriaQuery query, int source) {
- return Restrictions.and(c, query.getCriterionList().getParas(source));
- }
- public Criterion and(Criterion c1, Criterion c2) {
- return Restrictions.and(c1,c2);
- }
- public Criterion or(CriteriaQuery query, int source, int dest) {
- return Restrictions.or(query.getCriterionList().getParas(source),query.getCriterionList().getParas(dest));
- }
- public Criterion or(Criterion c,CriteriaQuery query, int source) {
- return Restrictions.or(c, query.getCriterionList().getParas(source));
- }
- public void or(Criterion c1, Criterion c2) {
- this.detachedCriteria.add(Restrictions.or(c1,c2));
- }
- public void addOrder(String ordername,String ordervalue) {
- // 写入order查询条件
- if ("asc".equals(ordername)) {
- detachedCriteria.addOrder(Order.asc(ordervalue));
- } else {
- detachedCriteria.addOrder(Order.desc(ordervalue));
- }
- }
- public void eq(String keyname,Object keyvalue){
- criterionList.addPara(Restrictions.eq(keyname, keyvalue));
- }
- public void notEq(String keyname,Object keyvalue){
- criterionList.addPara(Restrictions.or(Restrictions.gt(keyname, keyvalue),Restrictions.lt(keyname, keyvalue)));
- }
- public void like(String keyname,Object keyvalue){
- criterionList.addPara(Restrictions.like(keyname, keyvalue));
- }
- public void gt(String keyname,Object keyvalue){
- criterionList.addPara(Restrictions.gt(keyname, keyvalue));
- }
- public void lt(String keyname,Object keyvalue){
- criterionList.addPara(Restrictions.lt(keyname, keyvalue));
- }
- public void le(String keyname,Object keyvalue){
- criterionList.addPara(Restrictions.le(keyname, keyvalue));
- }
- public void ge(String keyname,Object keyvalue){
- criterionList.addPara(Restrictions.ge(keyname, keyvalue));
- }
- public void ilike(String keyname,Object[] keyvalue){
- criterionList.addPara(Restrictions.in(keyname, keyvalue));
- }
- public void between(String keyname,Object keyvalue1,Object keyvalue2) {
- Criterion c=null;// 写入between查询条件
- if (!AppUtils.isBlank(keyvalue1) && !AppUtils.isBlank(keyvalue2)) {
- c=Restrictions.between(keyname, keyvalue1, keyvalue2);
- } else if (!AppUtils.isBlank(keyvalue1)) {
- c=Restrictions.ge(keyname, keyvalue1);
- } else if (!AppUtils.isBlank(keyvalue2)) {
- c=Restrictions.le(keyname, keyvalue2);
- }
- criterionList.add(c);
- }
- public int getPageSize() {
- return pageSize;
- }
- public void setPageSize(int pageSize) {
- this.pageSize = pageSize;
- }
- public String getMyaction() {
- return myaction;
- }
- public void setMyaction(String myaction) {
- this.myaction = myaction;
- }
- public String getMyform() {
- return myform;
- }
- public void setMyform(String myform) {
- this.myform = myform;
- }
- }
另外需要一些辅助类的支持: 例如PageSupport 封装了返回的数据和工具条。
java 代码
- public class PageSupport implements Serializable{
- private int curPageNO;
- private int offset;
- private String toolBar;
- private List resultList=null;
- public PageSupport() {
- }
- public PageSupport(List resultList,String toolBar,int offset,int curPageNO) {
- this.curPageNO=curPageNO;
- this.offset=offset;
- this.toolBar=toolBar;
- this.resultList=resultList;
- }
- public List getResultList() {
- return resultList;
- }
- public void setResultList(List resultList) {
- this.resultList = resultList;
- }
- public String getToolBar() {
- return toolBar;
- }
CriterionList封装了Hibernate的参数:
java 代码
- /**
- * 封装了ArrayList,装的是Criterion
- */
- public class CriterionList extends ArrayList {
- public final Criterion getParas(final int index) {
- return (Criterion) super.get(index);
- }
- public final void addPara(final int index, final Criterion p) {
- super.add(index, p);
- }
- public final void addPara(final Criterion p) {
- super.add(p);
- }
- public final int indexofPara(final Criterion p) {
- return super.indexOf(p);
- }
- public final void removePara(final int index) {
- super.remove(index);
- }
- }
PagerUtil用于将客户端的页码和每页多少个记录算出应该取数据库中的记录的位置,再由hibernate构造出一个三层的sql语句。
java 代码
- public class PagerUtil {
- /**
- *
- * @param allCounts 总记录数
- * @param curPageNO
- * @param pageSize 每页显示的记录数目
- * @return
- */
- public static String getBar(String action,String form,int allCounts,int curPageNO, int pageSize){
- Pager pager = null;
- try {
- if (curPageNO<1) curPageNO=1;
- if (curPageNO> (int) Math.ceil((double) allCounts / pageSize))
- curPageNO =(int) Math.ceil((double) allCounts / pageSize);
- //得到offset
- int offset = (curPageNO-1)*pageSize;//从第几条开始取值
- //生成工具条
- pager=new Pager(allCounts,offset,pageSize);
- pager.setCurPageNO(curPageNO);//设置当前的页码
- } catch (Exception e) {
- System.out.println("生成工具条出错!");
- }
- return pager.getToolBar(action,form);
- }
- public static String getBar(String url,int allCounts,int curPageNO, int pageSize){
- Pager pager = null;
- try {
- if (curPageNO<1) curPageNO=1;
- if (curPageNO> (int) Math.ceil((double) allCounts / pageSize))
- curPageNO =(int) Math.ceil((double) allCounts / pageSize);
- //得到offset
- int offset = (curPageNO-1)*pageSize;//从第几条开始取值
- //生成工具条
- pager=new Pager(allCounts,offset,pageSize);
- pager.setCurPageNO(curPageNO);//设置当前的页码
- } catch (Exception e) {
- System.out.println("生成工具条出错!");
- }
- return pager.getToolBar(url);
- }
- public static int getOffset(int rowCounts,int curPageNO, int pageSize){
- int offset=0;
- try {
- //得到第几页
- if (curPageNO<1) curPageNO=1;
- if (curPageNO> (int) Math.ceil((double) rowCounts / pageSize))
- curPageNO =(int) Math.ceil((double) rowCounts / pageSize);
- //得到offset
- offset = (curPageNO-1)*pageSize;
- } catch (Exception e) {
- System.out.println("getOffset出错!");
- }
- return offset;
- }
- public static int getCurPageNO(String curPage){
- int curPageNO;
- if (curPage==null||"".equals(curPage.trim())) {
- curPageNO=1;//第一次处于第一页
- } else {
- try {
- curPageNO = Integer.parseInt(curPage);//得到当前页
- } catch (Exception e) {
- curPageNO=1;
- }
- }
- return curPageNO;
- }
- }
在struts的Action中:
java 代码
- private ActionForward findAllRole(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
- String curPageNO = request.getParameter("curPageNO");
- String myaction;
- String search=request.getParameter("search");
- //String myform="forms[0]";
- if(search==null){
- search="";
- myaction="findAllRole.do";
- }else{
- myaction="findAllRole.do?search="+search;
- }
- removeRequestAttribute(mapping,request);
- try {
- //Qbc查找方式
- CriteriaQuery cq=new CriteriaQuery(Role.class,curPageNO,myact
- struts+spring+hibernate通用分页方法.rar (30.7 KB)
- 描述: struts+spring+hibernate通用分页方法.rar
- 下载次数: 103
- pager.rar (9.3 KB)
- 描述: pager.rar
- 下载次数: 92
相关推荐
7. **文件`struts+spring+hibernate通用分页方法.doc`**:这个文档可能包含了具体的实现步骤、代码示例和注意事项,详细阐述如何将Struts、Spring和Hibernate整合起来,构建一个通用的分页功能。读者可以参考文档中...
### Struts2 + Spring2 + Hibernate3 经典分页技术解析 #### 一、概述 在企业级应用开发中,分页显示是常见的需求之一。对于数据量较大的查询结果,采用分页的方式不仅能减轻服务器的压力,提高用户体验,还能更好...
Struts、Hibernate和Spring是Java开发中的三大框架,它们各自负责不同的职责,组合起来可以构建出高效、松耦合的企业级应用。SSH(Struts、Spring、Hibernate)集成是Java Web开发中的常见模式,用于创建复杂的业务...
总的来说,这个"Struts2+Spring2+Hibernate3注册查询搜索分页实例"是一个很好的学习资源,涵盖了Java Web开发中的基础和核心部分。通过学习这个实例,开发者不仅可以掌握三大框架的基本用法,还能了解到如何将它们...
"使用Struts + Spring + Hibernate完成分页笔记"这个主题涵盖了三个关键的Java EE框架:Struts、Spring和Hibernate,它们分别负责表现层、业务逻辑层和数据访问层的管理。下面将详细介绍这三个框架在分页实现中的...
【新闻发布系统JAVA源码(struts+spring+hibernate)】是一个典型的Java Web应用程序,它利用了Struts、Spring和Hibernate三大开源框架的集成来构建高效、可维护的新闻发布平台。这个系统的主要目的是提供一个发布、...
在 Struts+Spring+Hibernate 结构中实现分页,需要结合这三大框架的特点来设计和实现。 首先,Struts 在控制器层中处理用户的请求,比如用户点击分页链接时,Struts 框架会调用相应的Action类方法。在这个方法中,...
Struts、Spring、Hibernate(SSH)是Java Web开发中三个非常重要的开源框架,它们分别用于MVC模式的实现、依赖注入和持久化管理。SSH整合是将这三个框架结合在一起,以构建更高效、可维护性更强的企业级应用。本文...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们的整合应用广泛用于构建复杂的Web应用程序,如本例中的图书馆管理系统。这个系统实现了用户登录和注册功能,并且提供了对书籍表的操作,包括增、删、改...
前段时间时间当我在学习SSH框架技术的时候,在网上很难找到关于SSH的完整例子,比如最基本的CRUD操作和用的比较多的查询分页技术。为了让SSH初学者更清楚全面的学习,不再像我初学时候迷失方向。特花了2天时间做一个...