- 浏览: 331367 次
- 性别:
- 来自: 沈阳
文章分类
- 全部博客 (160)
- Hiberate (13)
- struts+spring+hibernate (8)
- tomcat服务器 (3)
- sql server2000数据库 (1)
- JSTL标签 (4)
- 数据库 (1)
- jsp (3)
- mysql (4)
- xml (2)
- 字符串操作 (6)
- js (2)
- 过滤器 (0)
- dwr (2)
- Extjs学习笔记 (12)
- java文件 (2)
- struts错误记录 (2)
- struts经验技巧 (2)
- struts+spring+ibatis (3)
- 学习积累--分页的实现过程 (8)
- 递归 (1)
- 工具使用 (1)
- swfupload批量上传 (1)
- flex+webservice (1)
- 精彩文章分享 (0)
- flex+eclipse开发环境 (1)
- DB2数据库 (2)
- ssh+pager taglib分页实现 (2)
- java (0)
- java 异常 (2)
- mylipse6.5 环境内存溢出 (2)
- java 操作word文件 (1)
- 异常整理 (1)
- sql server 2005使用心得 (3)
- jdbc数据库封装 (1)
- javaMail 收发邮件 (1)
- 数据库设计 (1)
- jfreechart图表研究 (1)
- ibatis 学习积累 (1)
- 强制固定表格 (1)
- struts+hibernate (1)
- 分页标签的使用 (1)
- 基于mediawiki的安装心得 (1)
- mediawiki (0)
- Sturs2+Spring2.5+Hibernate3.5+compass 整合 (1)
- RestEasy (3)
- Date 日期公共类整理 (1)
- Excel (8)
- JAVA生成PDF文件 (1)
- Struts1.2+Jquery+Hibernate (1)
- 数据库连接池配置 (0)
- ANT 学习实例 (2)
- 英语学习总结 (1)
- Google动画脚本收藏 (1)
- 20111012 Google动画脚本 (0)
- JQUERY资料整理 (2)
- java图片处理 (1)
- Map集合 (1)
- JAVA 整理AD资料 (2)
- JAVA热启动 (3)
- JAVA操作XML (1)
- TOMCAT6连接池配置问题解决方案 (1)
- JAVA调用DLL学习 (1)
- JAVA移动应用(发送手机短信) (2)
- JAVA发送手机短信 (1)
- iReport报表使用心得 (2)
- 解决Ireport生成PDF报表中文乱码问题 (1)
- iReport使用 (1)
- 全文搜索 compass (1)
- SVN管理 (1)
- Myeclipse8.5 工具编译 (1)
- ibm appscan 扫描问题汇总解决 (1)
- Rose建模设计工具 (1)
- oracle (1)
- MyEclipse8.5注册码(8.6也可以) (0)
- oracle job定时触发执行 (1)
- java Excel导出公用类 (1)
- Highcharts图表 (1)
- excel打包成zip文件,并且提供加密功能 (0)
- excel打包成zip文件 (1)
- 并且提供加密功能 (1)
- vue学习 (1)
- WebStorm使用 (1)
最新评论
-
ahkoun:
楼主棒棒哒,下载后可以直接运行
使用 RestEasy 和 Apache Tomcat 构建 RESTful Web 服务 -
520920:
真的可以了,很棒!
java.lang.Exception: DEBUG -- CLOSE BY CLIENT STACK TRACE -
Yellow013:
不错的例子。
使用 RestEasy 和 Apache Tomcat 构建 RESTful Web 服务 -
huahoucun:
passwd = null; env.put(Context. ...
JAVA 实现AD验证 -
来迟了:
http://www.smschinese.cn/api.sh ...
JAVA发送手机短信
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.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 pic.dao;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Projections;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import common.dao.Page;
@Repository
public class HibernateUtil extends HibernateDaoSupport
{
/**
* 注入sessionFactory
*
* @param sessionFactory
*/
@Resource(name = "sessionFactory")
public void setFactory(final SessionFactory sessionFactory)
{
//HibernateDaoSupport上的方法,注入sessionFactory
setSessionFactory(sessionFactory);
}
/**
* 取得当前session
*
* @return
*/
public Session getCS()
{
return this.getSession();
//return this.getSessionFactory().getCurrentSession();
}
/**
* HQL分页查询
*
* @param page
* 分页对象,包含分页信息,如每页记录数,当前页码等
* @patam patam 参数集合 HQL如下:from User where expertname like :expertname
* map.put("expertname", "%" + expertName + "%");
* expertname是HQL中的:expertname
*
* @param hqlCount
* 计算总记录数的sql
* @param hql
* 查询的Sql
* @return List 结果集合
*/
@SuppressWarnings("unchecked")
public List findListPage(final Page page, final Map param, final String hqlCount, final String hql)
{
final Session session = this.getCS();
//查询总记录条数的Query
final Query query_count = session.createQuery(hqlCount);
//查询的Query
final Query query = session.createQuery(hql);
if (param != null)
{
//query.setProperties(param);
final Iterator it = param.keySet().iterator();
while (it.hasNext())
{
final Object key = it.next();
//两个Query查询条件相同
query_count.setParameter(key.toString(), param.get(key));
query.setParameter(key.toString(), param.get(key));
}
}
//总记录数
final int nCount = ((Long) query_count.iterate().next()).intValue();
//计算分页数据
page.init(nCount);
//从第N条开始
query.setFirstResult(page.getStart());
//取出X条
query.setMaxResults(page.getPageSize());
final List list = query.list();
return list;
}
/**
* Criteria 分页查询, 要事先设置好查询条件, 再把Criteria对象传进来
*
* @param page
* 分页对象
* @param criteria
* Criteria对象,要事先设置好查询条件, 再把Criteria对象传进来 ,
* 如criteria.add(Restrictions.eq("name", "zl"))
*
* @return 结果集合
*/
@SuppressWarnings("unchecked")
public List findListPage(final Page page, final Criteria criteria)
{
// 获取根据条件分页查询的总行数
final int rowCount = (Integer) criteria.setProjection(Projections.rowCount()).uniqueResult();
criteria.setProjection(null);
//计算分页数据
page.init(rowCount);
criteria.setFirstResult(page.getStart());
criteria.setMaxResults(page.getPageSize());
return criteria.list();
}
}
package junit_test.pic.dao;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import junit_test.base.JUnitBase_svc;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.junit.BeforeClass;
import org.junit.Test;
import pic.dao.HibernateUtil;
import pic.dao.entity.Email;
import pic.svc.EmailManager;
import common.dao.Page;
/**
* 测试HibernateUtil 基类
*
* @author zl
*
*/
public class HibernateUtilTest extends JUnitBase_svc
{
static HibernateUtil hibernateUtil;
@BeforeClass
public static void setUpBeforeClass() throws Exception
{
hibernateUtil = (HibernateUtil) getBean("hibernateUtil");
}
/**
* 测试取得hibernateUtil bean
*/
@Test
public void testGetHibernateUtil()
{
assertNotNull(hibernateUtil);
}
@Test
public void add()
{
//先添加一些邮件
for (int i = 0; i < 7; i++)
{
final Email email = new Email();
email.setContent("内容2");
email.setIndex(2);
email.setQueueName("队列名称2");
email.setReceivers("Receivers2");
email.setSubject("Subject2");
email.setSum(20);
final EmailManager emailManagerImpl = (EmailManager) getBean("emailManagerImpl");
emailManagerImpl.add(email);
}
}
/**
* 测试分页方法
*/
@SuppressWarnings("unchecked")
@Test
public void testFindListPage()
{
//分页测试 , 第一页
final String where = " where content=:content ";
final String hqlCount = "select count(*) from Email" + where;
final String hql = "from Email" + where;
final Map<String, Object> param = new HashMap<String, Object>();
param.put("content", "内容2");
final List<Email> list = hibernateUtil.findListPage(new Page(), param, hqlCount, hql);
for (final Email e : list)
{
System.out.println(e.toString());
}
//测试 超出总页数
hibernateUtil.findListPage(new Page(10000), param, hqlCount, hql);
//测试 当前页码小于0
hibernateUtil.findListPage(new Page(-1), param, hqlCount, hql);
}
/**
* 测试分页方法
*/
@Test
public void testFindListPage2()
{
final Session session = getNewS();
final Criteria criteria = session.createCriteria(Email.class);
criteria.add(Restrictions.eq("content", "内容2"));
//criteria.add(Restrictions.like(propertyName, value))
final List<Email> list = hibernateUtil.findListPage(new Page(2), criteria);
for (final Email e : list)
{
System.out.println(e.toString());
}
}
}
/**
* 分页功能
*/
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.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 pic.dao;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Projections;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import common.dao.Page;
@Repository
public class HibernateUtil extends HibernateDaoSupport
{
/**
* 注入sessionFactory
*
* @param sessionFactory
*/
@Resource(name = "sessionFactory")
public void setFactory(final SessionFactory sessionFactory)
{
//HibernateDaoSupport上的方法,注入sessionFactory
setSessionFactory(sessionFactory);
}
/**
* 取得当前session
*
* @return
*/
public Session getCS()
{
return this.getSession();
//return this.getSessionFactory().getCurrentSession();
}
/**
* HQL分页查询
*
* @param page
* 分页对象,包含分页信息,如每页记录数,当前页码等
* @patam patam 参数集合 HQL如下:from User where expertname like :expertname
* map.put("expertname", "%" + expertName + "%");
* expertname是HQL中的:expertname
*
* @param hqlCount
* 计算总记录数的sql
* @param hql
* 查询的Sql
* @return List 结果集合
*/
@SuppressWarnings("unchecked")
public List findListPage(final Page page, final Map param, final String hqlCount, final String hql)
{
final Session session = this.getCS();
//查询总记录条数的Query
final Query query_count = session.createQuery(hqlCount);
//查询的Query
final Query query = session.createQuery(hql);
if (param != null)
{
//query.setProperties(param);
final Iterator it = param.keySet().iterator();
while (it.hasNext())
{
final Object key = it.next();
//两个Query查询条件相同
query_count.setParameter(key.toString(), param.get(key));
query.setParameter(key.toString(), param.get(key));
}
}
//总记录数
final int nCount = ((Long) query_count.iterate().next()).intValue();
//计算分页数据
page.init(nCount);
//从第N条开始
query.setFirstResult(page.getStart());
//取出X条
query.setMaxResults(page.getPageSize());
final List list = query.list();
return list;
}
/**
* Criteria 分页查询, 要事先设置好查询条件, 再把Criteria对象传进来
*
* @param page
* 分页对象
* @param criteria
* Criteria对象,要事先设置好查询条件, 再把Criteria对象传进来 ,
* 如criteria.add(Restrictions.eq("name", "zl"))
*
* @return 结果集合
*/
@SuppressWarnings("unchecked")
public List findListPage(final Page page, final Criteria criteria)
{
// 获取根据条件分页查询的总行数
final int rowCount = (Integer) criteria.setProjection(Projections.rowCount()).uniqueResult();
criteria.setProjection(null);
//计算分页数据
page.init(rowCount);
criteria.setFirstResult(page.getStart());
criteria.setMaxResults(page.getPageSize());
return criteria.list();
}
}
package junit_test.pic.dao;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import junit_test.base.JUnitBase_svc;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.junit.BeforeClass;
import org.junit.Test;
import pic.dao.HibernateUtil;
import pic.dao.entity.Email;
import pic.svc.EmailManager;
import common.dao.Page;
/**
* 测试HibernateUtil 基类
*
* @author zl
*
*/
public class HibernateUtilTest extends JUnitBase_svc
{
static HibernateUtil hibernateUtil;
@BeforeClass
public static void setUpBeforeClass() throws Exception
{
hibernateUtil = (HibernateUtil) getBean("hibernateUtil");
}
/**
* 测试取得hibernateUtil bean
*/
@Test
public void testGetHibernateUtil()
{
assertNotNull(hibernateUtil);
}
@Test
public void add()
{
//先添加一些邮件
for (int i = 0; i < 7; i++)
{
final Email email = new Email();
email.setContent("内容2");
email.setIndex(2);
email.setQueueName("队列名称2");
email.setReceivers("Receivers2");
email.setSubject("Subject2");
email.setSum(20);
final EmailManager emailManagerImpl = (EmailManager) getBean("emailManagerImpl");
emailManagerImpl.add(email);
}
}
/**
* 测试分页方法
*/
@SuppressWarnings("unchecked")
@Test
public void testFindListPage()
{
//分页测试 , 第一页
final String where = " where content=:content ";
final String hqlCount = "select count(*) from Email" + where;
final String hql = "from Email" + where;
final Map<String, Object> param = new HashMap<String, Object>();
param.put("content", "内容2");
final List<Email> list = hibernateUtil.findListPage(new Page(), param, hqlCount, hql);
for (final Email e : list)
{
System.out.println(e.toString());
}
//测试 超出总页数
hibernateUtil.findListPage(new Page(10000), param, hqlCount, hql);
//测试 当前页码小于0
hibernateUtil.findListPage(new Page(-1), param, hqlCount, hql);
}
/**
* 测试分页方法
*/
@Test
public void testFindListPage2()
{
final Session session = getNewS();
final Criteria criteria = session.createCriteria(Email.class);
criteria.add(Restrictions.eq("content", "内容2"));
//criteria.add(Restrictions.like(propertyName, value))
final List<Email> list = hibernateUtil.findListPage(new Page(2), criteria);
for (final Email e : list)
{
System.out.println(e.toString());
}
}
}
发表评论
-
IBM appscan 扫描问题解决
2012-07-24 16:52 1701http://serisboy.iteye.com/blog/ ... -
struts+hibernate 错误记录
2012-04-01 11:15 832今天,在做练习的时候,包错: org.hibernate.Hi ... -
一个很好用的jsp分页Bean
2009-11-19 11:17 1565import java.sql.*; import beans ... -
Hibernate分页bean
2009-11-13 15:36 1199package mrmwq; // 导入相关包文件 impo ... -
hibernate 延迟加载问题探讨
2009-11-13 13:19 1225延迟初始化错误是运用H ... -
如何把Hibernate2.1升级到Hibernate3.0?
2009-11-13 13:10 1087选自<<精通Hibernate ... -
struts+hibernate用的分页Bean
2009-11-12 21:42 1427package org.infosys.util; impo ... -
Hibernate分页bean
2009-11-11 11:50 1023package mrmwq; // 导入相关包文件 impo ... -
Hibernate一例
2009-11-11 11:38 960package dao; import java.util. ... -
DetachedCriteria离线查询
2009-11-11 11:36 1259//在Action中 拼查询条件 public Action ... -
Hibernate n+1问题
2009-11-11 11:34 2398Hibernate 中常会用到set,bag等集合表示1 对多 ... -
Hibernate批量删除
2009-11-11 11:27 1073public void delete(final List&l ...
相关推荐
总的来说,"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 =...