不会用某个东西或对其不懂时,往往看到的都是那东西缺点,其实hibernate有很多让业界肯定的亮点。
解决方案 »
- struts2上传文件乱码
- 怎么样用JFreeChart来实现曲线图(已经实现)和表格(未实现),其他技术也可以!
- 请教java如何脱离开发环境运行
- weblogic 菜鸟级提问,这个问题是不是由于我的jar包没有部署正确???????
- ajax+struts+spring+hibernate的论坛源码下载
- 求一套学习jdbc,mysql,orcle的视频资料
- 急
- eclipse下搭建hibernate报错404
- mybatis 报错Result Maps collection does not contain value for java.lang.String
- Java新生求助
- 每个j2ee的工程师都会面临选择-EJB3.0足够成熟了吗?
- 急!!java多线程停止问题
用list.size()还是要回数据库重新搜一遍list 的
。
Hibernate是一把笨重的宝刀,不是每个人都舞得动的。
如果舞得动,那的确是把宝刀。
如果舞得动,那的确是把宝刀。
==============================
非常同意
但是性能的提高取决与你对它的理解程度
如果你最基本的sql语句不会写,那我相信你写复杂的hql语句也写不出
"select count(*) as count from (" + strSQL+ ")"
这里的strSQL可以是任意的SQL语句,所以通用性很强。而用HSQL就作不到这一点。
O/R mapping 这种理念你ok了么?
{
public static final int PAGE_SIZE = 15;//每页多少行
private List elements; private int pageSize; private int pageNumber; private int totalElements = 0; /**
* 基于Hibernate的Query数据的分页处理
* @param query
* @param pageNumber 第几页
* @param pageSize 每页几行
*/
public PageUtil(Query query, int pageNumber, int pageSize)
{
this.pageNumber = pageNumber;
this.pageSize = pageSize;
try
{
ScrollableResults scrollableResults = query.scroll();
//get total
scrollableResults.last();
this.totalElements = scrollableResults.getRowNumber() + 1;
if (Integer.MAX_VALUE == this.pageNumber
|| this.pageNumber > getLastPageNumber()) //last page
{
this.pageNumber = getLastPageNumber();
}
elements = query.setFirstResult(
(this.pageNumber - 1) * this.pageSize).setMaxResults(
this.pageSize).list();
}
catch (HibernateException e)
{
throw new RuntimeException(e);
}
} public boolean isFirstPage()
{
return getThisPageNumber() == 1;
} public boolean isLastPage()
{
return getThisPageNumber() >= getLastPageNumber();
} public boolean hasNextPage()
{
return getLastPageNumber() > getThisPageNumber();
} public boolean hasPreviousPage()
{
return getThisPageNumber() > 1;
} public int getLastPageNumber()
{
return totalElements % this.pageSize == 0 ? totalElements
/ this.pageSize : (totalElements / this.pageSize) + 1;
} /**
* 返回List类型数据
*
* @return List
*/
public Object getThisPageElements()
{
return elements;
}
/**
* 返回总记录数
* @return int
*/
public int getTotalNumberOfElements()
{
return totalElements;
} public int getThisPageFirstElementNumber()
{
return (getThisPageNumber() - 1) * getPageSize() + 1;
} public int getThisPageLastElementNumber()
{
int fullPage = getThisPageFirstElementNumber() + getPageSize() - 1;
return getTotalNumberOfElements() < fullPage ? getTotalNumberOfElements()
: fullPage;
} public int getNextPageNumber()
{
return getThisPageNumber() + 1;
} public int getPreviousPageNumber()
{
return getThisPageNumber() - 1;
} public int getPageSize()
{
return pageSize;
} public int getThisPageNumber()
{
return pageNumber;
}
}
无聊的时候写的,小ha的分页……设置成懒惰查询……自己研究研究小ha的源代码再来牢骚吧~兄弟
ps:实现接口是hibernate官方提供的,可以在官网上看见
int resultCount;hql:hql = "from model.User";Object obj = session.createQuery("select count(*) " + hql).uniqueResult();
resultCount = Integer.parseInt(obj.toString());List results = session.createQuery(hql)
.setFirstResult(pageSize*(page-1))
.setMaxResults(pageSize)
.list();
sql:
sql = "select * from user";int resultCount = jdbc.queryForInt("select count(*) from ("+sql+")");List list = jdbc.queryForList(用page和pageSize构造分页后的sql);你觉得这两个复杂度差别很大么