- 浏览: 466724 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yuan_bin1990:
您好,请问下demo如何运行啊,准备研究研究,但不知道入口啊。 ...
ssh2(struts2+spring2.5+hibernate3.3)自动生成代码程序 -
luyulong:
[b][/b][i][/i][ ...
jQuery进度条插件 jQuery progressBar -
txin0814:
mark..
读取文件目录 -
vurses:
[align=center][color=red][size= ...
include 与 jsp:include区别 -
Roshan2:
http://lijiejava.iteye.com/blog ...
Spring AOP 入门实例
JE有两篇文章,关于分页查询 与泛型 的,写的很好.这里收藏一下.
---------------------------------------------
下面是我自己写的分页方法,同时也参考了上面两篇文章.
以下代码用在了实际的项目中.
Page类,计算分页数据
- package common.dao;
- /**
- * 分页功能
- */
- public class Page
- {
- public final int DEFAULT_PAGESIZE = 15; // 每页记录数
- public final int DEFAULT_PAGE = 1; // 默认显示第几页
- // =========================================================================================
- protected int count; // 总的记录数
- protected int pageSize; // 每页记录数
- protected int pageCount; // 总的页数
- protected int page; // 本页页号
- protected int start; // 起始记录下标(MySql从0开始)
- // =========================================================================================
- /**
- * 构造方法
- *
- * @param nPageSize
- * 每页记录数
- * @param nPage
- * 本页页号
- */
- public Page(final int nPageSize, final int nPage)
- {
- pageSize = nPageSize; // 每页大小
- page = nPage; // 本页页号
- }
- /**
- * 构造方法 ,默认每页20条记录
- *
- * @param nPage
- * 本页页号
- */
- public Page(final int nPage)
- {
- pageSize = DEFAULT_PAGESIZE; // 每页大小
- page = nPage; // 本页页号
- }
- /**
- * 构造方法 ,默认每页20条记录,显示第一页
- *
- */
- public Page()
- {
- pageSize = DEFAULT_PAGESIZE; // 每页大小
- page = DEFAULT_PAGE; // 本页页号
- }
- /**
- * 分页初始化
- *
- * @param nCount
- * 总的记录数
- */
- public void init(final int nCount)
- {
- init(nCount, pageSize, page);
- }
- /**
- * 分页初始化;记录总记录数,每页记录数,当前页,并计算总页数、本页大小和检测当前页是否有效
- *
- * @param nCount
- * 总的记录数
- * @param nPageSize
- * 每页记录数
- * @param nPage
- * 本页页号
- */
- public void init(final int nCount, final int nPageSize, final int nPage)
- {
- count = nCount; // 总的项数
- page = nPage; // 本页页号
- pageSize = nPageSize; // 每页大小
- if (0 >= pageSize)
- {
- pageSize = DEFAULT_PAGESIZE;
- }
- pageCount = (nCount + pageSize - 1) / pageSize; // 计算总的页数
- // 防止 Page 超范围并计算当前页大小
- if (page > pageCount)
- {
- page = pageCount;
- }
- if (page < 1)
- {
- page = DEFAULT_PAGE;
- }
- start = min();
- }
- /**
- * 计算起始记录下标(MySql从0开始)
- *
- * @return
- */
- public int min()
- {
- final int max = page * pageSize - 1;
- return max - pageSize + 1;
- }
- // public int max()
- // {
- // final int max = page * pageSize - 1;
- // return max;
- // }
- /**
- * 计算导航页(开始页号)
- *
- * @param nPageNav
- * 导航页数
- * @return 开始页号
- */
- public final int CalcMinPage(final int nPageNav)
- {
- int min = page - (nPageNav / 2);
- int max = page + (nPageNav / 2);
- if (min < 1)
- {
- final int a = 0 - min;
- min = 1;
- max = max + a;
- }
- if (max > pageCount)
- {
- final int b = max - pageCount;
- max = pageCount;
- min = min - b < 1 ? 1 : min - b;
- }
- return min;
- }
- /**
- * 计算导航页(结束页号)
- *
- * @param nPageNav
- * 导航页数
- * @return 结束页号
- */
- public final int CalcMaxPage(final int nPageNav)
- {
- int min = page - (nPageNav / 2);
- int max = page + (nPageNav / 2);
- if (min < 1)
- {
- final int a = 0 - min;
- min = 1;
- max = max + a;
- }
- if (max > pageCount)
- {
- final int b = max - pageCount;
- max = pageCount;
- min = min - b < 1 ? 1 : min - b;
- }
- return max;
- }
- @Override
- public String toString()
- {
- final StringBuffer sbf = new StringBuffer();
- sbf.append(" 总的记录数:" + count);
- sbf.append(" 每页记录数:" + pageSize);
- sbf.append(" 总的页数:" + pageCount);
- sbf.append(" 本页页号:" + page);
- sbf.append(" 起始记录下标:" + start);
- return sbf.toString();
- }
- public int getCount()
- {
- return count;
- }
- public void setCount(final int count)
- {
- this.count = count;
- }
- public int getPageSize()
- {
- return pageSize;
- }
- public void setPageSize(final int pageSize)
- {
- this.pageSize = pageSize;
- }
- public int getPageCount()
- {
- return pageCount;
- }
- public void setPageCount(final int pageCount)
- {
- this.pageCount = pageCount;
- }
- public int getPage()
- {
- return page;
- }
- public void setPage(final int page)
- {
- this.page = page;
- }
- public int getStart()
- {
- return start;
- }
- public void setStart(final int start)
- {
- this.start = start;
- }
- }
package common.dao; /** * 分页功能 */ public class Page { public final int DEFAULT_PAGESIZE = 15; // 每页记录数 public final int DEFAULT_PAGE = 1; // 默认显示第几页 // ========================================================================================= protected int count; // 总的记录数 protected int pageSize; // 每页记录数 protected int pageCount; // 总的页数 protected int page; // 本页页号 protected int start; // 起始记录下标(MySql从0开始) // ========================================================================================= /** * 构造方法 * * @param nPageSize * 每页记录数 * @param nPage * 本页页号 */ public Page(final int nPageSize, final int nPage) { pageSize = nPageSize; // 每页大小 page = nPage; // 本页页号 } /** * 构造方法 ,默认每页20条记录 * * @param nPage * 本页页号 */ public Page(final int nPage) { pageSize = DEFAULT_PAGESIZE; // 每页大小 page = nPage; // 本页页号 } /** * 构造方法 ,默认每页20条记录,显示第一页 * */ public Page() { pageSize = DEFAULT_PAGESIZE; // 每页大小 page = DEFAULT_PAGE; // 本页页号 } /** * 分页初始化 * * @param nCount * 总的记录数 */ public void init(final int nCount) { init(nCount, pageSize, page); } /** * 分页初始化;记录总记录数,每页记录数,当前页,并计算总页数、本页大小和检测当前页是否有效 * * @param nCount * 总的记录数 * @param nPageSize * 每页记录数 * @param nPage * 本页页号 */ public void init(final int nCount, final int nPageSize, final int nPage) { count = nCount; // 总的项数 page = nPage; // 本页页号 pageSize = nPageSize; // 每页大小 if (0 >= pageSize) { pageSize = DEFAULT_PAGESIZE; } pageCount = (nCount + pageSize - 1) / pageSize; // 计算总的页数 // 防止 Page 超范围并计算当前页大小 if (page > pageCount) { page = pageCount; } if (page < 1) { page = DEFAULT_PAGE; } start = min(); } /** * 计算起始记录下标(MySql从0开始) * * @return */ public int min() { final int max = page * pageSize - 1; return max - pageSize + 1; } // public int max() // { // final int max = page * pageSize - 1; // return max; // } /** * 计算导航页(开始页号) * * @param nPageNav * 导航页数 * @return 开始页号 */ public final int CalcMinPage(final int nPageNav) { int min = page - (nPageNav / 2); int max = page + (nPageNav / 2); if (min < 1) { final int a = 0 - min; min = 1; max = max + a; } if (max > pageCount) { final int b = max - pageCount; max = pageCount; min = min - b < 1 ? 1 : min - b; } return min; } /** * 计算导航页(结束页号) * * @param nPageNav * 导航页数 * @return 结束页号 */ public final int CalcMaxPage(final int nPageNav) { int min = page - (nPageNav / 2); int max = page + (nPageNav / 2); if (min < 1) { final int a = 0 - min; min = 1; max = max + a; } if (max > pageCount) { final int b = max - pageCount; max = pageCount; min = min - b < 1 ? 1 : min - b; } return max; } @Override public String toString() { final StringBuffer sbf = new StringBuffer(); sbf.append(" 总的记录数:" + count); sbf.append(" 每页记录数:" + pageSize); sbf.append(" 总的页数:" + pageCount); sbf.append(" 本页页号:" + page); sbf.append(" 起始记录下标:" + start); return sbf.toString(); } public int getCount() { return count; } public void setCount(final int count) { this.count = count; } public int getPageSize() { return pageSize; } public void setPageSize(final int pageSize) { this.pageSize = pageSize; } public int getPageCount() { return pageCount; } public void setPageCount(final int pageCount) { this.pageCount = pageCount; } public int getPage() { return page; } public void setPage(final int page) { this.page = page; } public int getStart() { return start; } public void setStart(final int start) { this.start = start; } }
WebPage (继承自Page) 扩展了在JSP页面上显示 "上一页 1 2 3 下一页" 的功能
- package common.web;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.struts2.ServletActionContext;
- import common.dao.Page;
- public class WebPage extends Page
- {
- public final int DEFAULT_NAV_SIZE = 20; // 导航页数
- private boolean center = true; //默认居中
- private String className = "page_css"; //默认CSS
- /**
- * 构造方法
- *
- * @param nPageSize
- * 每页记录数
- * @param nPage
- * 本页页号
- */
- public WebPage(final int nPageSize, final int nPage, final String sPageURLParas)
- {
- super(nPageSize, nPage);
- setPageURL(sPageURLParas);
- }
- /**
- * 构造方法
- *
- * @param nPageSize
- * 每页记录数
- * @param nPage
- * 本页页号
- */
- public WebPage(final int nPageSize, final int nPage)
- {
- super(nPageSize, nPage);
- setPageURL("");
- }
- /**
- * 构造方法 ,默认每页20条记录
- *
- * @param nPage
- * 本页页号
- */
- public WebPage(final int nPage)
- {
- super(nPage);
- setPageURL("");
- }
- private String pageURL; // 导航地址
- private String pageNAV; // 导航表格
- public void setPageURL(final String sPageURLPara)
- {
- //final HttpServletRequest request,
- final HttpServletRequest request = ServletActionContext.getRequest();
- if (sPageURLPara.length() > 0)
- {
- pageURL = "?" + sPageURLPara.substring(1) + "&";
- }
- else
- {
- pageURL = "?";
- }
- pageURL = request.getRequestURI() + pageURL + "page=";
- pageNAV = null;
- }
- public String getPageNAV()
- {
- final int nPageNav = DEFAULT_NAV_SIZE; // 导航页数
- final int nPage = page; // 当前页号
- final int nPageMin = CalcMinPage(nPageNav); // 开始页号
- final int nPageMax = CalcMaxPage(nPageNav); // 结束页号
- final StringBuffer sPageNav = new StringBuffer(1024);
- if (nPageMin < nPageMax)
- {
- sPageNav.append("<table class=\"" + className + "\"");
- if (center)
- {
- //导航条居中 ,样式表
- sPageNav.append(" align=\"center\">");
- }
- sPageNav.append("<tr>\r\n");
- if (nPageMin != nPage)
- {
- sPageNav.append("<td><a href=\"");
- sPageNav.append(pageURL + (nPage - 1));
- sPageNav.append("\">上页</a></td>\r\n");
- }
- else
- {
- sPageNav.append("<td>上页</td>\r\n");
- }
- for (int i = nPageMin; i <= nPageMax; i++)
- {
- sPageNav.append("<td>");
- if (i != nPage)
- {
- sPageNav.append("<a style='text-decoration: underline' href=\"");
- sPageNav.append(pageURL + (i));
- sPageNav.append("\">");
- }
- if (i != nPage)
- {
- sPageNav.append(i);
- }
- else
- {
- sPageNav.append("<b style='color:#ff7700'>" + (i) + "</b>");
- }
- if (i != nPage)
- {
- sPageNav.append("</a>");
- }
- sPageNav.append("</td>\r\n");
- }
- if (nPageMax != nPage)
- {
- sPageNav.append("<td><a style='text-decoration: underline' href=\"");
- sPageNav.append(pageURL + (page + 1));
- sPageNav.append("\">下页</a></td>\r\n");
- }
- else
- {
- sPageNav.append("<td>下页</td>\r\n");
- }
- sPageNav.append("</tr></table>\r\n");
- }
- pageNAV = sPageNav.toString();
- return pageNAV;
- }
- public boolean isCenter()
- {
- return center;
- }
- public void setCenter(final boolean center)
- {
- this.center = center;
- }
- public String getClassName()
- {
- return className;
- }
- public void setClassName(final String className)
- {
- this.className = className;
- }
- }
package common.web; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import common.dao.Page; public class WebPage extends Page { public final int DEFAULT_NAV_SIZE = 20; // 导航页数 private boolean center = true; //默认居中 private String className = "page_css"; //默认CSS /** * 构造方法 * * @param nPageSize * 每页记录数 * @param nPage * 本页页号 */ public WebPage(final int nPageSize, final int nPage, final String sPageURLParas) { super(nPageSize, nPage); setPageURL(sPageURLParas); } /** * 构造方法 * * @param nPageSize * 每页记录数 * @param nPage * 本页页号 */ public WebPage(final int nPageSize, final int nPage) { super(nPageSize, nPage); setPageURL(""); } /** * 构造方法 ,默认每页20条记录 * * @param nPage * 本页页号 */ public WebPage(final int nPage) { super(nPage); setPageURL(""); } private String pageURL; // 导航地址 private String pageNAV; // 导航表格 public void setPageURL(final String sPageURLPara) { //final HttpServletRequest request, final HttpServletRequest request = ServletActionContext.getRequest(); if (sPageURLPara.length() > 0) { pageURL = "?" + sPageURLPara.substring(1) + "&"; } else { pageURL = "?"; } pageURL = request.getRequestURI() + pageURL + "page="; pageNAV = null; } public String getPageNAV() { final int nPageNav = DEFAULT_NAV_SIZE; // 导航页数 final int nPage = page; // 当前页号 final int nPageMin = CalcMinPage(nPageNav); // 开始页号 final int nPageMax = CalcMaxPage(nPageNav); // 结束页号 final StringBuffer sPageNav = new StringBuffer(1024); if (nPageMin < nPageMax) { sPageNav.append("<table class=\"" + className + "\""); if (center) { //导航条居中 ,样式表 sPageNav.append(" align=\"center\">"); } sPageNav.append("<tr>\r\n"); if (nPageMin != nPage) { sPageNav.append("<td><a href=\""); sPageNav.append(pageURL + (nPage - 1)); sPageNav.append("\">上页</a></td>\r\n"); } else { sPageNav.append("<td>上页</td>\r\n"); } for (int i = nPageMin; i <= nPageMax; i++) { sPageNav.append("<td>"); if (i != nPage) { sPageNav.append("<a style='text-decoration: underline' href=\""); sPageNav.append(pageURL + (i)); sPageNav.append("\">"); } if (i != nPage) { sPageNav.append(i); } else { sPageNav.append("<b style='color:#ff7700'>" + (i) + "</b>"); } if (i != nPage) { sPageNav.app发表评论
-
spring分布式事务(jotm)
2010-06-17 22:19 1787分布式事务是指操作多个数据库之间的事务,在tomcat下,是没 ... -
Struts+Spring+Hibernate实现上传下载
2010-06-16 20:44 754Struts+Spring+Hibernate实现 ... -
ssh中利用pager-taglib和filter进行分页
2010-05-27 10:04 1646在ssh架构中利用pager-taglib和filter根据用 ... -
STRUTS2 SSL的一个好用插件
2010-05-18 13:52 1044最近遇到问题了,要用到SSL,比如某个连接https://xx ... -
struts2 + spring 2.5 + ibatis
2010-05-17 11:29 810很久没有做struts2 + spring 2.5 + iba ... -
Spring事务详解
2010-04-13 16:23 848Spring中事务的定义: 一 ... -
ssh整合分页
2010-01-26 16:57 1550dao 方法: Java代码 /** ... -
jbpm4整合struts2+spring2.5+hibernate3.3
2009-09-07 23:17 1886如果不结合其他的框 ... -
ssh2(struts2+spring2.5+hibernate3.3)自动生成代码程序
2009-09-07 23:00 1615为什么需要自动生成代 ...
相关推荐
总的来说,"SSHWithAnnotationDemo"项目展示了如何利用现代Java技术栈的高级特性,包括Struts2、Spring3和Hibernate的注解功能,DAO层的泛型设计以及通用的分页实现,来构建一个高效、可维护的Web应用。这样的实践...
- 在此案例中,可能使用了Hibernate的`Criteria`或`HQL`查询语言配合`PageRequest`或自定义分页实现,通过指定页码和每页大小来获取特定范围的数据。 6. **文件名:user** - "user"可能是数据库中的一个表名,...
此外,了解SQL语言也是必要的,虽然Hibernate可以自动生成SQL,但在某些复杂查询场景下,可能需要手动编写SQL。最后,熟悉Spring框架和其他与Hibernate整合的技术,如Spring Data JPA,能够进一步提升开发效率。
通用查询页面中的查询项、查询出的分页列表都是自动生成的。开发简便、快速,附件中是一套完整的demo和使用说明 支持全部Hql语法格式 Awake 后续功能扩展 1.XML格式数据输出,保证了ajax用户也可以使用Awake框架...
### 泛型Hibernate的实现与Spring集成 #### 一、泛型Hibernate概念及其实现 在Java开发领域,尤其在企业级应用开发中,Hibernate框架因其强大的对象关系映射(ORM)能力而受到广泛欢迎。泛型Hibernate是利用Java...
而`PageBean`可能是一个用于分页查询的辅助类,封装了当前页、每页数量以及数据列表等信息。 这种非泛型的DAO实现方式可能会牺牲一些灵活性,但它简化了代码结构,降低了学习和使用的门槛,尤其适合小规模项目或者...
在SSH框架中,可以结合Hibernate的Criteria API或HQL实现分页查询。通常需要指定每页的记录数和当前页码,返回相应的数据列表和总记录数。 在实际开发中,"SSH 泛型DAO分页"的整合可能涉及到以下步骤: - 配置SSH...
在这个特定的讨论中,我们聚焦于SSH1中的一个关键概念:通用泛型DAO(Data Access Object)以及分页功能的实现。DAO层是模型层和数据访问层之间的桥梁,它的主要职责是处理数据库操作,为业务层提供无状态的数据访问...
总结,泛型Hibernate DAO是企业级应用中常见的设计模式,它封装了数据库操作,使得业务逻辑层与数据访问层分离,提高了代码的可复用性和可测试性。在实际开发中,可以根据项目的具体需求,对这个基础实现进行扩展和...
1. 创建一个泛型的DAO接口,定义分页查询的方法,参数可能包括实体类的类型、查询条件、当前页数和每页大小。 2. 实现DAO接口,使用Hibernate的Session和Query对象进行分页查询,并返回结果集。 3. 在Service层中,...
5. 分页查询(Paging):提供分页查询功能,通常结合"Page"类使用。 接下来是"Page"类。在大型应用中,为了提高用户体验,通常会采用分页显示数据。Page类是用来表示分页结果的,它通常包含当前页数、总页数、每页...
4. Query和Criteria的创建与配置:返回已经设置好基本查询条件的Query和Criteria对象,方便开发者添加更多的查询参数。 5. 分页功能:提供pagedQuery()方法,除了获取分页结果外,还会计算总记录数,以满足显示分页...
- 分页查询:封装分页查询方法,如`List<T> findByPage(int pageNum, int pageSize)`,以支持大数据量的场景。 7. **异常处理**: 在DAO层捕获和处理Hibernate抛出的异常,如`HibernateException`,并根据业务...
在实际项目中,我们通常会根据需求进一步细化泛型DAO,比如添加分页查询、按条件查询等功能。此外,为了更好地适应业务需求,我们还可以考虑使用Spring的`@Repository`注解进行组件管理,并结合`@Transactional`注解...
- **分页查询**:使用Criteria API或HQL实现分页查询,结合Page对象存储查询结果和分页信息。 3. **事务管理** - 为了保证数据的一致性,通常需要在通用DAO中处理事务。可以使用Spring的TransactionTemplate或者...
Java 分页是数据库查询和网页显示大量数据时常用的一种技术,它能有效地管理大量数据,避免一次性加载所有数据导致的性能问题和用户体验下降。在Java中实现分页主要涉及两个核心概念:偏移量(Offset)和限制大小...
在Java Web开发中,SSH(Struts2、Spring、Hibernate)框架被广泛使用,其中的分页功能是提高用户体验的重要一环。对于处理多对多关系的数据,分页显得更为复杂,因为涉及到的对象关联和集合的处理。本篇将详细阐述...
- **分页查询**:支持对查询结果进行分页处理,避免一次性加载大量数据。 #### 六、最佳实践与常见问题 - **合理设计实体类**:遵循单一职责原则,避免实体类过于臃肿。 - **正确使用缓存**:合理配置缓存策略,...
- 使用HibernateDAO时,根据`Page`对象的参数设置查询的分页信息,例如`criteria.setFirstResult(page.getFirst()-1).setMaxResults(page.getPageSize()).list();`。 - 将查询结果设置到`Page`的`result`属性,并...
例如,对于一个基于Hibernate的查询,可以这样实现: ```java public List<User> getUsers() { int pageIndex = PageParams.PAGEINDEX.get(); int pageSize = PageParams.PAGESIZE.get(); Criteria criteria =...