📄 pagedohibernateimpl.java
字号:
package bit.jeffy.util;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import bit.jeffy.bean.PageBean;
public class PageDoHibernateImpl implements HibernateCallback {
protected final Log log = LogFactory.getLog(getClass());
private PageBean page = null;
private Class clazz = null;
public PageDoHibernateImpl(PageBean page) {
page = page;
}
public PageDoHibernateImpl(Class clazz, PageBean page) {
page = page;
this.clazz = clazz;
}
/*
* (非 Javadoc)
*
* @see org.springframework.orm.hibernate3.HibernateCallback#doInHibernate(org.hibernate.Session)
*/
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
StringBuffer buffer = new StringBuffer();
buffer.setLength(0);
if (page.getQueryString() != null
&& !"".equals(page.getQueryString().trim()))
if (page.getQueryString().trim().startsWith("order"))
buffer.append(" where 1=1 ").append(page.getQueryString());
else
buffer.append(" where ").append(page.getQueryString());
Query query = null;
Object values[] = page.getValues();
List list;
String queryString = buffer.toString();
if (!page.isNeedSplitPage()) {
query = session.createQuery(queryString);
if (queryString.indexOf('?') > 0 && values != null) {
for (int i = 0; i < values.length; i++)
query.setParameter(i, values[i]);
}
list = query.list();
return list;
}
if (page.getRecordsPerPage() > 0) {
String queryStr = "";
if (queryString.toLowerCase().indexOf("order") != -1) {
queryStr = "select count(*) "
+ queryString.substring(0, queryString.toLowerCase()
.indexOf("order"));
} else {
queryStr = "select count(*) " + queryString;
}
int totalRecord = getTotalRecoreds(session, queryStr, values);
page.setTotalRecords(totalRecord);
int totalPage = 1;
totalPage = totalRecord % page.getRecordsPerPage() != 0 ? totalRecord
/ page.getRecordsPerPage() + 1
: totalRecord / page.getRecordsPerPage();
page.setTotalPage(totalPage);
if (page.getCurrentPage() > totalPage)
page.setCurrentPage(totalPage);
} else {
page.setTotalPage(1);
page.setCurrentPage(1);
}
query = session.createQuery(queryString);
if (queryString.indexOf('?') > 0 && values != null) {
for (int i = 0; i < values.length; i++)
query.setParameter(i, values[i]);
}
if (page.getRecordsPerPage() > 0) {
query.setFirstResult((page.getCurrentPage() - 1)
* page.getRecordsPerPage());
query.setMaxResults(page.getRecordsPerPage());
}
list = query.list();
if (page.getRecordsPerPage() < 0)
page.setTotalRecords(list.size());
return list;
}
/*
*
*/
private int getTotalRecoreds(Session session, String str, Object obj[]) {
String sql = str;
Object values[] = obj;
Query query = session.createQuery(sql);
if (sql.indexOf('?') > 0 && values != null) {
for (int i = 0; i < values.length; i++)
query.setParameter(i, values[i]);
}
Integer totalRecord = (Integer) query.list().get(0);
return totalRecord.intValue();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -