﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-bob-文章分类-pagination</title><link>http://www.blogjava.net/keweibo/category/27080.html</link><description>一专  Java 多能  Delphi,Powerbuilder ... </description><language>zh-cn</language><lastBuildDate>Thu, 01 Dec 2011 01:53:39 GMT</lastBuildDate><pubDate>Thu, 01 Dec 2011 01:53:39 GMT</pubDate><ttl>60</ttl><item><title>mybatis3.05 分页收藏</title><link>http://www.blogjava.net/keweibo/articles/355693.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Wed, 03 Aug 2011 09:15:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/355693.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/355693.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/355693.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/355693.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/355693.html</trackback:ping><description><![CDATA[<strong>以下內容來自:<div><span style="color: red;">http://zhaohe162.blog.163.com/blog/static/38216797201131262952990/</span></div><br /></strong><div><p><strong>1.把hibernate下的dialect包全部拷贝到mybatis包的jdbc目录下，如下图所示：</strong></p> <div><img alt="mybatis下的分页，支持所有的数据库 - 断尘伤痕 - 断尘居" style="margin:0 10px 0 0;" src="http://img611.ph.126.net/nNB-VFx23-EqtEHACin3iw==/1670272511803166055.jpg" /></div>&nbsp;<p><br /> <br /></p> <p><strong>2.定义一个ResultSetHandler&nbsp; Interceptor<br /></strong><br /> package cn.machi.utils;</p> <p>imp<wbr>ort java.sql.Statement;<br /> imp<wbr>ort java.util.Properties;</p> <p>imp<wbr>ort org.apache.ibatis.executor.resultset.FastResultSetHandler;<br /> imp<wbr>ort org.apache.ibatis.executor.resultset.ResultSetHandler;<br /> imp<wbr>ort org.apache.ibatis.plugin.Interceptor;<br /> imp<wbr>ort org.apache.ibatis.plugin.Intercepts;<br /> imp<wbr>ort org.apache.ibatis.plugin.Invocation;<br /> imp<wbr>ort org.apache.ibatis.plugin.Plugin;<br /> imp<wbr>ort org.apache.ibatis.plugin.Signature;<br /> imp<wbr>ort org.apache.ibatis.session.RowBounds;</p> <p>@Intercepts( <a href="http://zhaohe162.blog.163.com/blog/%7B@Signature%28type">{@Signature(type</a> = ResultSetHandler.class, method = "handleResultSets", args = {Statement.class})})<br /> public class DiclectResultSetHandlerInterceptor implements Interceptor<br /> {<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp; public Object intercept(Invocation invocation) throws Throwable<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FastResultSetHandler resultSet = (FastResultSetHandler)invocation.getTarget();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RowBounds rowBounds = (RowBounds)ReflectUtil.getFieldValue(resultSet,<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "rowBounds");<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (rowBounds.getLimit() &gt; 0<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; rowBounds.getLimit() &lt; RowBounds.NO_ROW_LIMIT)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReflectUtil.setFieldValue(resultSet, "rowBounds", new RowBounds());<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return invocation.proceed();<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp; public Object plugin(Object target)<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Plugin.wrap(target, this);<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp; public void setProperties(Properties properties)<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp; }<br /> }</p> <p>&nbsp;</p> <p><strong>3.定义一个StatementHandler的Interceptor<br /></strong><br />  package cn.machi.utils;</p> <p>imp<wbr>ort java.sql.Connection;<br /> imp<wbr>ort java.util.Properties;</p> <p>imp<wbr>ort org.apache.ibatis.executor.statement.PreparedStatementHandler;<br />  imp<wbr>ort org.apache.ibatis.executor.statement.RoutingStatementHandler;<br /> imp<wbr>ort org.apache.ibatis.executor.statement.StatementHandler;<br /> imp<wbr>ort org.apache.ibatis.jdbc.dialect.OracleDialect;<br /> imp<wbr>ort org.apache.ibatis.mapping.BoundSql;<br /> imp<wbr>ort org.apache.ibatis.plugin.Interceptor;<br /> imp<wbr>ort org.apache.ibatis.plugin.Intercepts;<br /> imp<wbr>ort org.apache.ibatis.plugin.Invocation;<br /> imp<wbr>ort org.apache.ibatis.plugin.Plugin;<br /> imp<wbr>ort org.apache.ibatis.plugin.Signature;<br /> imp<wbr>ort org.apache.ibatis.session.RowBounds;</p> <p>@Intercepts( <a href="http://zhaohe162.blog.163.com/blog/%7B@Signature%28type">{@Signature(type</a> = StatementHandler.class, method = "prepare", args = {Connection.class})})<br /> public class DiclectStatementHandlerInterceptor implements Interceptor<br /> {<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp; private static final String DIALECT = "org.apache.ibatis.jdbc.dialect.OracleDialect";<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp; public Object intercept(Invocation invocation) throws Throwable<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RoutingStatementHandler statement = (RoutingStatementHandler)invocation.getTarget();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PreparedStatementHandler handler = (PreparedStatementHandler)ReflectUtil.getFieldValue(statement,<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "delegate");<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RowBounds rowBounds = (RowBounds)ReflectUtil.getFieldValue(handler,<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "rowBounds");<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (rowBounds.getLimit() &gt; 0<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; rowBounds.getLimit() &lt; RowBounds.NO_ROW_LIMIT)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BoundSql boundSql = statement.getBoundSql();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String sql = boundSql.getSql();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OracleDialect dialect = (OracleDialect)Class.forName(DIALECT)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .newInstance();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sql = dialect.getLimitString(sql,<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rowBounds.getOffset(),<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rowBounds.getLimit());<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReflectUtil.setFieldValue(boundSql, "sql", sql);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return invocation.proceed();<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp; public Object plugin(Object target)<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Plugin.wrap(target, this);<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp; public void setProperties(Properties properties)<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp; }<br /> }<br /></p> <p><strong>4.定义工具类ReflectUtil<br /></strong><br /> package cn.machi.utils;</p> <p>imp<wbr>ort java.lang.reflect.Field;<br /> imp<wbr>ort java.lang.reflect.InvocationTargetException;<br /> imp<wbr>ort java.lang.reflect.Method;<br /> imp<wbr>ort java.lang.reflect.Modifier;</p> <p>imp<wbr>ort org.apache.log4j.Logger;</p> <p><br /> public class ReflectUtil<br /> {<br /> &nbsp;&nbsp;&nbsp; private static Logger log = Logger.getLogger(ReflectUtil.class);<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp; private static Object operate(Object obj, String fieldName,<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object fieldVal, String type)<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object ret = null;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 获得对象类型&nbsp;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class&lt;? extends Object&gt; classType = obj.getClass();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 获得对象的所有属性&nbsp;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field fields[] = classType.getDeclaredFields();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; fields.length; i++)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field field = fields[i];<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (field.getName().equals(fieldName))<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String firstLetter = fieldName.substring(0, 1)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .toUpperCase(); // 获得和属性对应的getXXX()方法的名字&nbsp;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ("set".equals(type))<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String setMethodName = "set" + firstLetter<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + fieldName.substring(1); // 获得和属性对应的getXXX()方法&nbsp;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method setMethod = classType.getMethod(setMethodName,<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new Class[] {field.getType()}); // 调用原对象的getXXX()方法&nbsp;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = setMethod.invoke(obj, new Object[] {fieldVal});<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ("get".equals(type))<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String getMethodName = "get" + firstLetter<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + fieldName.substring(1); // 获得和属性对应的setXXX()方法的名字&nbsp;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method getMethod = classType.getMethod(getMethodName,<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new Class[] {});<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = getMethod.invoke(obj, new Object[] {});<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ret;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception e)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.warn("reflect error:" + fieldName, e);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ret;<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp; public static Object getVal(Object obj, String fieldName)<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return operate(obj, fieldName, null, "get");<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp; public static void setVal(Object obj, String fieldName, Object fieldVal)<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; operate(obj, fieldName, fieldVal, "set");<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp; private static Method getDeclaredMethod(Object object, String methodName,<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class&lt;?&gt;[] parameterTypes)<br /> &nbsp;&nbsp;&nbsp; {<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Class&lt;?&gt; superClass = object.getClass(); superClass  != Object.class; superClass = superClass.getSuperclass())<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //superClass.getMethod(methodName, parameterTypes);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return superClass.getDeclaredMethod(methodName, parameterTypes);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (NoSuchMethodException e)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Method 不在当前类定义, 继续向上转型<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp; private static void makeAccessible(Field field)<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!Modifier.isPublic(field.getModifiers()))<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; field.setAccessible(true);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp; private static Field getDeclaredField(Object object, String filedName)<br /> &nbsp;&nbsp;&nbsp; {<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Class&lt;?&gt; superClass = object.getClass(); superClass  != Object.class; superClass = superClass.getSuperclass())<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return superClass.getDeclaredField(filedName);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (NoSuchFieldException e)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Field 不在当前类定义, 继续向上转型<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp; public static Object invokeMethod(Object object, String methodName,<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class&lt;?&gt;[] parameterTypes, Object[] parameters)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws InvocationTargetException<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Method method = getDeclaredMethod(object, methodName, parameterTypes);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (method == null)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new IllegalArgumentException("Could not find method ["<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + methodName + "] on target [" + object + "]");<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method.setAccessible(true);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return method.invoke(object, parameters);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (IllegalAccessException e)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp; public static void setFieldValue(Object object, String fieldName,<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object value)<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field field = getDeclaredField(object, fieldName);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (field == null)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new IllegalArgumentException("Could not find field ["<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + fieldName + "] on target [" + object + "]");<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; makeAccessible(field);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; field.set(object, value);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (IllegalAccessException e)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp;<br /> &nbsp;&nbsp;&nbsp; public static Object getFieldValue(Object object, String fieldName)<br /> &nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Field field = getDeclaredField(object, fieldName);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (field == null)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new IllegalArgumentException("Could not find field ["<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + fieldName + "] on target [" + object + "]");<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; makeAccessible(field);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object result = null;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = field.get(object);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (IllegalAccessException e)<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;<br /> }<br /></p> <p><strong>5.更新mapper configuration文件，添加如下几条，注意plugins在整个configuration文件中的顺序</strong></p> <p>&lt;plugins&gt;<br /> &lt;plugin interceptor="functionPoint.db.DiclectStatementHandlerInterceptor"/&gt;<br />  &lt;plugin interceptor="functionPoint.db.DiclectResultSetHandlerInterceptor"/&gt;<br />  &lt;/plugins&gt;<br /></p> <p><strong>6.使用方法同mybatis逻辑分页，拦截器会自动拦截执行SQL的地方，加上分页代码：</strong></p> <p>getSqlSession().selectList(mapId, queryKey,new RowBounds(pageId, pageSize));</p></div><br /><span style="color: red;">==============================================================</span><br /><span style="color: red;">按照上面的做了,但運行時卻拋出缺少 IN OUT參數之類的錯誤.</span><br /><span style="color: red;">後來換了Dialect類文件就OK了.</span><span style="color: red;">OracleDialect內容參考自:</span><br /><div><span style="color: red;">http://rapid-framework.googlecode.com/svn/trunk/rapid-framework/src/rapid_framework_common/cn/org/rapid_framework/jdbc/dialect/<br /><br /><br /></span></div> <img src ="http://www.blogjava.net/keweibo/aggbug/355693.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2011-08-03 17:15 <a href="http://www.blogjava.net/keweibo/articles/355693.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Spring的JdbcTemplate实现分页功能</title><link>http://www.blogjava.net/keweibo/articles/194354.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sun, 20 Apr 2008 11:32:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/194354.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/194354.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/194354.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/194354.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/194354.html</trackback:ping><description><![CDATA[这里用的是<a class="channel_keylink" href="http://oracle.chinaitlab.com/" target="_blank">Oracle</a>数据库，使用伪列ROWNUM来实现分页。分页代码如下：<br />
　　<br />
　　package com.deity.ranking.util;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import java.util.List;<br />
　　import org.springframework.jdbc.core.JdbcTemplate;<br />
　　import org.springframework.jdbc.core.support.JdbcDaoSupport;<br />
　　/** * 分页函数 *　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* @author allenpan */<br />
public class Pagination extends JdbcDaoSupport{<br />
　　public static final int NUMBERS_PER_PAGE = 10;<br />
　　//一页显示的记录数<br />
　　private int numPerPage;<br />
　　//记录总数<br />
　　private int totalRows;<br />
　　//总页数<br />
　　private int totalPages;<br />
　　//当前页码<br />
　　private int currentPage;<br />
　　//起始行数<br />
　　private int startIndex;<br />
　　//结束行数<br />
　　private int lastIndex;<br />
　　//结果集存放List<br />
　　private List resultList;<br />
　　//JdbcTemplate jTemplate<br />
　　private JdbcTemplate jTemplate;<br />
　　/**<br />
　　* 每页显示10条记录的构造函数,使用该函数必须先给Pagination设置currentPage，jTemplate初值<br />
　　* @param sql oracle语句<br />
　　*/<br />
　　public Pagination(String sql){<br />
　　if(jTemplate == null){<br />
　　throw new IllegalArgumentException("com.deity.ranking.util.Pagination.jTemplate is null,please initial it first. ");<br />
　　}else if(sql.equals("")){<br />
　　throw new IllegalArgumentException("com.deity.ranking.util.Pagination.sql is empty,please initial it first. ");<br />
　　}<br />
　　new Pagination(sql,currentPage,NUMBERS_PER_PAGE,jTemplate);<br />
　　}<br />
　　/**分页构造函数<br />
　　* @param sql 根据传入的sql语句得到一些基本分页信息<br />
　　* @param currentPage 当前页<br />
　　* @param numPerPage 每页记录数<br />
　　* @param jTemplate JdbcTemplate实例<br />
　　*/<br />
　　public Pagination(String sql,int currentPage,int numPerPage,JdbcTemplate jTemplate){<br />
　　if(jTemplate == null){<br />
　　throw new IllegalArgumentException("com.deity.ranking.util.Pagination.jTemplate is null,please initial it first. ");<br />
　　}else if(sql == null || sql.equals("")){<br />
　　throw new IllegalArgumentException("com.deity.ranking.util.Pagination.sql is empty,please initial it first. ");<br />
　　}<br />
　　//设置每页显示记录数<br />
　　setNumPerPage(numPerPage);<br />
　　//设置要显示的页数<br />
　　setCurrentPage(currentPage);<br />
　　//计算总记录数<br />
　　StringBuffer totalSQL = new StringBuffer(" SELECT count(*) FROM ( ");<br />
　　totalSQL.append(sql);<br />
　　totalSQL.append(" ) totalTable ");<br />
　　//给JdbcTemplate赋值<br />
　　setJdbcTemplate(jTemplate);<br />
　　//总记录数<br />
　　setTotalRows(getJdbcTemplate().queryForInt(totalSQL.toString()));<br />
　　//计算总页数<br />
　　setTotalPages();<br />
　　//计算起始行数<br />
　　setStartIndex();<br />
　　//计算结束行数<br />
　　setLastIndex();<br />
　　System.out.println("lastIndex="+lastIndex);//////////////////<br />
　　//构造oracle数据库的分页语句<br />
　　StringBuffer paginationSQL = new StringBuffer(" SELECT * FROM ( ");<br />
　　paginationSQL.append(" SELECT temp.* ,ROWNUM num FROM ( ");<br />
　　paginationSQL.append(sql);<br />
　　paginationSQL.append("　) temp where ROWNUM &lt;= " + lastIndex);<br />
　　paginationSQL.append(" ) WHERE　num &gt; " + startIndex);<br />
　　//装入结果集<br />
　　setResultList(getJdbcTemplate().queryForList(paginationSQL.toString()));<br />
　　}<br />
　　/**<br />
　　* @param args<br />
　　*/<br />
　　public static void main(String[] args) {<br />
　　// TODO Auto-generated method stub　　　　}<br />
　　public int getCurrentPage() {<br />
　　return currentPage;<br />
　　}<br />
　　public void setCurrentPage(int currentPage) {<br />
　　this.currentPage = currentPage;<br />
　　}<br />
　　public int getNumPerPage() {<br />
　　return numPerPage;<br />
　　}<br />
　　public void setNumPerPage(int numPerPage) {<br />
　　this.numPerPage = numPerPage;<br />
　　}<br />
　　public List getResultList() {<br />
　　return resultList;　　　　}<br />
　　public void setResultList(List resultList) {<br />
　　this.resultList = resultList;<br />
　　}<br />
　　public int getTotalPages() {<br />
　　return totalPages;<br />
　　}<br />
　　//计算总页数<br />
　　public void setTotalPages() {<br />
　　if(totalRows % numPerPage == 0){<br />
　　this.totalPages = totalRows / numPerPage;<br />
　　}else{<br />
　　this.totalPages　= (totalRows / numPerPage) + 1;<br />
　　}<br />
　　}<br />
　　public int getTotalRows() {<br />
　　return totalRows;<br />
　　}<br />
　　public void setTotalRows(int totalRows) {<br />
　　this.totalRows = totalRows;<br />
　　}<br />
　　public int getStartIndex() {<br />
　　return startIndex;<br />
　　}<br />
　　public void setStartIndex() {<br />
　　this.startIndex = (currentPage - 1) * numPerPage;<br />
　　}<br />
　　public int getLastIndex() {<br />
　　return lastIndex;<br />
　　}<br />
　　public JdbcTemplate getJTemplate() {<br />
　　return jTemplate;<br />
　　}<br />
　　public void setJTemplate(JdbcTemplate template) {<br />
　　jTemplate = template;<br />
　　}<br />
　　//计算结束时候的索引<br />
　　public void setLastIndex() {<br />
　　System.out.println("totalRows="+totalRows);///////////<br />
　　System.out.println("numPerPage="+numPerPage);///////////<br />
　　if( totalRows &lt; numPerPage){<br />
　　this.lastIndex = totalRows;<br />
　　}else if((totalRows % numPerPage == 0) || (totalRows % numPerPage != 0 &amp;&amp; currentPage &lt; totalPages)){<br />
　　this.lastIndex = currentPage * numPerPage;<br />
　　}else if(totalRows % numPerPage != 0 &amp;&amp; currentPage == totalPages){//最后一页<br />
　　this.lastIndex = totalRows ;<br />
　　}<br />
　　}}在我的业务逻辑代码中：<br />
　　/**<br />
　　* find season ranking list from DC<br />
　　* @param areaId 选手区域id<br />
　　* @param rankDate 赛季<br />
　　* @param category 类别<br />
　　* @param characterName 角色名<br />
　　* @return List<br />
　　*/<br />
　　public List findSeasonRankingList(Long areaId, int rankYear,int rankMonth,<br />
　　Long categoryId,String characterName) {<br />
　　//SQL语句<br />
　　StringBuffer sql = new StringBuffer(" SELECT C.USERID userid,D.POSNAME posname,C.GAMEID gameid,C.AMOUNT amount,C.RANK rank FROM ");<br />
　　//表　　　　　　　　　　　　sql.append(" (SELECT B.USERID USERID,");<br />
　　sql.append(" B.POSID POSID,");<br />
　　sql.append(" A.DISTRICT_CODE DISTRICTCODE,");<br />
　　sql.append(" A.GAMEID GAMEID,");<br />
　　sql.append(" AMOUNT AMOUNT,");<br />
　　sql.append(" RANK RANK ");<br />
　　sql.append(" FROM TB_FS_RANK A ");<br />
　　sql.append(" LEFT JOIN TB_CHARACTER_INFO B ");<br />
　　sql.append(" ON A.DISTRICT_CODE = B.DISTRICT_CODE ");<br />
　　sql.append(" AND A.GAMEID = B.GAMEID ");<br />
　　//附加条件<br />
　　if(areaId != null &amp;&amp; areaId.intValue() != 0){<br />
　　sql.append(" and A.DISTRICT_CODE = " + areaId.intValue());<br />
　　}<br />
　　if( rankYear &gt; 1970 &amp;&amp; rankMonth &gt; 0){<br />
　　//hql.append(" and sas.id.dt &gt;= to_date('" + rankYear + "-" + rankMonth + "-01 00:00:00'," + "YYYY-MM-DD HH24:MI:SS");<br />
　　//hql.append(" and sas.id.dt &lt;= to_date('" + rankYear + "-" + rankMonth + "-" + TimeTool.findMaxDateInMonth(rankYear,rankMonth) + " 23:59:59'," + "YYYY-MM-DD HH24:MI:SS");<br />
　　sql.append(" and A.DT = fn_time_convert(to_date('" + rankYear + "-" + rankMonth + "'," + "'YYYY-MM')) ");<br />
　　}<br />
　　if(categoryId != null &amp;&amp; categoryId.intValue() != 0){<br />
　　sql.append(" and A.CID = " + categoryId.intValue());<br />
　　}<br />
　　if(characterName != null &amp;&amp; !characterName.trim().equals("")){<br />
　　sql.append(" and A.GAMEID = '" + characterName.trim()+"' ");<br />
　　}<br />
　　sql.append(" ORDER BY RANK ASC) C ");<br />
　　sql.append(" LEFT JOIN TB_FS_POSITION D ");<br />
　　sql.append(" ON C.POSID = D.POSID ");<br />
　　sql.append(" ORDER BY C.RANK ");<br />
　　System.out.println("hql="+sql.toString());////////////////<br />
　　//使用自己的分页程序控制结果集<br />
　　Pagination pageInfo = new Pagination(sql.toString(),1,10,getJdbcTemplate());<br />
　　return pageInfo.getResultList();<br />
　　//return getJdbcTemplate().queryForList(sql.toString());<br />
　　} <br />
<span style="color: red">文章來源：http://java.chinaitlab.com/Spring/38091.html</span>
<img src ="http://www.blogjava.net/keweibo/aggbug/194354.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2008-04-20 19:32 <a href="http://www.blogjava.net/keweibo/articles/194354.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用JSTL标签简化分页显示</title><link>http://www.blogjava.net/keweibo/articles/158303.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 05 Nov 2007 09:14:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/158303.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/158303.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/158303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/158303.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/158303.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.blogjava.net/keweibo/articles/158303.html'>阅读全文</a><img src ="http://www.blogjava.net/keweibo/aggbug/158303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-11-05 17:14 <a href="http://www.blogjava.net/keweibo/articles/158303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个分页实现例子</title><link>http://www.blogjava.net/keweibo/articles/156515.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sun, 28 Oct 2007 11:05:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/156515.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/156515.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/156515.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/156515.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/156515.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.blogjava.net/keweibo/articles/156515.html'>阅读全文</a><img src ="http://www.blogjava.net/keweibo/aggbug/156515.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-10-28 19:05 <a href="http://www.blogjava.net/keweibo/articles/156515.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>应用Hibernate3的DetachedCriteria实现分页查询 </title><link>http://www.blogjava.net/keweibo/articles/154776.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sun, 21 Oct 2007 13:51:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/154776.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/154776.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/154776.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/154776.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/154776.html</trackback:ping><description><![CDATA[<p>Hibernate3提供了DetachedCriteria，使得我们可以在Web层构造detachedCriteria，然后调用业务层Bean，进行动态条件查询，根据这一功能，我设计了通用的抽象Bean基类和分页类支持，代码来自于Quake Wang的javaeye-core包的相应类，然后又做了很多修改。</p>
<p>分页支持类：</p>
<p>
<div class="code_title">java 代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.javaeye.common.util; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.util.List; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;PaginationSupport&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;PAGESIZE&nbsp;=&nbsp;</span><span class="number">30</span><span>; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;pageSize&nbsp;=&nbsp;PAGESIZE; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;List&nbsp;items; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;totalCount; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>[]&nbsp;indexes&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">int</span><span>[</span><span class="number">0</span><span>]; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;startIndex&nbsp;=&nbsp;</span><span class="number">0</span><span>; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;PaginationSupport(List&nbsp;items,&nbsp;</span><span class="keyword">int</span><span>&nbsp;totalCount)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setPageSize(PAGESIZE); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTotalCount(totalCount); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setItems(items);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setStartIndex(</span><span class="number">0</span><span>); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;PaginationSupport(List&nbsp;items,&nbsp;</span><span class="keyword">int</span><span>&nbsp;totalCount,&nbsp;</span><span class="keyword">int</span><span>&nbsp;startIndex)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setPageSize(PAGESIZE); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTotalCount(totalCount); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setItems(items);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setStartIndex(startIndex); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;PaginationSupport(List&nbsp;items,&nbsp;</span><span class="keyword">int</span><span>&nbsp;totalCount,&nbsp;</span><span class="keyword">int</span><span>&nbsp;pageSize,&nbsp;</span><span class="keyword">int</span><span>&nbsp;startIndex)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setPageSize(pageSize); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTotalCount(totalCount); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setItems(items); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setStartIndex(startIndex); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;List&nbsp;getItems()&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;items; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setItems(List&nbsp;items)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.items&nbsp;=&nbsp;items; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getPageSize()&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;pageSize; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setPageSize(</span><span class="keyword">int</span><span>&nbsp;pageSize)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.pageSize&nbsp;=&nbsp;pageSize; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getTotalCount()&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;totalCount; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setTotalCount(</span><span class="keyword">int</span><span>&nbsp;totalCount)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(totalCount&nbsp;&gt;&nbsp;</span><span class="number">0</span><span>)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.totalCount&nbsp;=&nbsp;totalCount; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;count&nbsp;=&nbsp;totalCount&nbsp;/&nbsp;pageSize; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(totalCount&nbsp;%&nbsp;pageSize&nbsp;&gt;&nbsp;</span><span class="number">0</span><span>) &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count++; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexes&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">int</span><span>[count]; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;count;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexes[i]&nbsp;=&nbsp;pageSize&nbsp;*&nbsp;i; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">else</span><span>&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.totalCount&nbsp;=&nbsp;</span><span class="number">0</span><span>; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>[]&nbsp;getIndexes()&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;indexes; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setIndexes(</span><span class="keyword">int</span><span>[]&nbsp;indexes)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.indexes&nbsp;=&nbsp;indexes; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getStartIndex()&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;startIndex; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setStartIndex(</span><span class="keyword">int</span><span>&nbsp;startIndex)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(totalCount&nbsp;&lt;=&nbsp;</span><span class="number">0</span><span>) &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.startIndex&nbsp;=&nbsp;</span><span class="number">0</span><span>; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>&nbsp;(startIndex&nbsp;&gt;=&nbsp;totalCount) &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.startIndex&nbsp;=&nbsp;indexes[indexes.length&nbsp;-&nbsp;</span><span class="number">1</span><span>]; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>&nbsp;(startIndex&nbsp;&lt;&nbsp;</span><span class="number">0</span><span>) &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.startIndex&nbsp;=&nbsp;</span><span class="number">0</span><span>; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.startIndex&nbsp;=&nbsp;indexes[startIndex&nbsp;/&nbsp;pageSize]; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getNextIndex()&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;nextIndex&nbsp;=&nbsp;getStartIndex()&nbsp;+&nbsp;pageSize; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(nextIndex&nbsp;&gt;=&nbsp;totalCount) &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getStartIndex(); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;nextIndex; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getPreviousIndex()&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;previousIndex&nbsp;=&nbsp;getStartIndex()&nbsp;-&nbsp;pageSize; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(previousIndex&nbsp;&lt;&nbsp;</span><span class="number">0</span><span>) &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="number">0</span><span>; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;previousIndex; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
</div>
<p><script>render_code();</script></p>
<p>&nbsp;</p>
<p>抽象业务类 <br />
<div class="code_title">java 代码</div>
<div class="code_div">
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="comment">/** </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;*&nbsp;Created&nbsp;on&nbsp;2005-7-12 </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span class="keyword">package</span><span>&nbsp;com.javaeye.common.business; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">import</span><span>&nbsp;java.io.Serializable; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;java.util.List; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.Criteria; &nbsp;&nbsp;</span></span></li>
    <li class=""><span class="keyword">import</span><span>&nbsp;org.hibernate.HibernateException; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.Session; &nbsp;&nbsp;</span></span></li>
    <li class=""><span class="keyword">import</span><span>&nbsp;org.hibernate.criterion.DetachedCriteria; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.hibernate.criterion.Projections; &nbsp;&nbsp;</span></span></li>
    <li class=""><span class="keyword">import</span><span>&nbsp;org.springframework.orm.hibernate3.HibernateCallback; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;org.springframework.orm.hibernate3.support.HibernateDaoSupport; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">import</span><span>&nbsp;com.javaeye.common.util.PaginationSupport; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">abstract</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;AbstractManager&nbsp;</span><span class="keyword">extends</span><span>&nbsp;HibernateDaoSupport&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;cacheQueries&nbsp;=&nbsp;</span><span class="keyword">false</span><span>; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;queryCacheRegion; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setCacheQueries(</span><span class="keyword">boolean</span><span>&nbsp;cacheQueries)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.cacheQueries&nbsp;=&nbsp;cacheQueries; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setQueryCacheRegion(String&nbsp;queryCacheRegion)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.queryCacheRegion&nbsp;=&nbsp;queryCacheRegion; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;save(</span><span class="keyword">final</span><span>&nbsp;Object&nbsp;entity)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getHibernateTemplate().save(entity); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;persist(</span><span class="keyword">final</span><span>&nbsp;Object&nbsp;entity)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getHibernateTemplate().save(entity); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;update(</span><span class="keyword">final</span><span>&nbsp;Object&nbsp;entity)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getHibernateTemplate().update(entity); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;delete(</span><span class="keyword">final</span><span>&nbsp;Object&nbsp;entity)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getHibernateTemplate().delete(entity); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Object&nbsp;load(</span><span class="keyword">final</span><span>&nbsp;Class&nbsp;entity,&nbsp;</span><span class="keyword">final</span><span>&nbsp;Serializable&nbsp;id)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getHibernateTemplate().load(entity,&nbsp;id); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Object&nbsp;get(</span><span class="keyword">final</span><span>&nbsp;Class&nbsp;entity,&nbsp;</span><span class="keyword">final</span><span>&nbsp;Serializable&nbsp;id)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getHibernateTemplate().get(entity,&nbsp;id); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;List&nbsp;findAll(</span><span class="keyword">final</span><span>&nbsp;Class&nbsp;entity)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getHibernateTemplate().find(</span><span class="string">"from&nbsp;"</span><span>&nbsp;+&nbsp;entity.getName()); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;List&nbsp;findByNamedQuery(</span><span class="keyword">final</span><span>&nbsp;String&nbsp;namedQuery)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getHibernateTemplate().findByNamedQuery(namedQuery); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;List&nbsp;findByNamedQuery(</span><span class="keyword">final</span><span>&nbsp;String&nbsp;query,&nbsp;</span><span class="keyword">final</span><span>&nbsp;Object&nbsp;parameter)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getHibernateTemplate().findByNamedQuery(query,&nbsp;parameter); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;List&nbsp;findByNamedQuery(</span><span class="keyword">final</span><span>&nbsp;String&nbsp;query,&nbsp;</span><span class="keyword">final</span><span>&nbsp;Object[]&nbsp;parameters)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getHibernateTemplate().findByNamedQuery(query,&nbsp;parameters); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;List&nbsp;find(</span><span class="keyword">final</span><span>&nbsp;String&nbsp;query)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getHibernateTemplate().find(query); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;List&nbsp;find(</span><span class="keyword">final</span><span>&nbsp;String&nbsp;query,&nbsp;</span><span class="keyword">final</span><span>&nbsp;Object&nbsp;parameter)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;getHibernateTemplate().find(query,&nbsp;parameter); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;PaginationSupport&nbsp;findPageByCriteria(</span><span class="keyword">final</span><span>&nbsp;DetachedCriteria&nbsp;detachedCriteria)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;findPageByCriteria(detachedCriteria,&nbsp;PaginationSupport.PAGESIZE,&nbsp;</span><span class="number">0</span><span>); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;PaginationSupport&nbsp;findPageByCriteria(</span><span class="keyword">final</span><span>&nbsp;DetachedCriteria&nbsp;detachedCriteria,&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;startIndex)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;findPageByCriteria(detachedCriteria,&nbsp;PaginationSupport.PAGESIZE,&nbsp;startIndex); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;PaginationSupport&nbsp;findPageByCriteria(</span><span class="keyword">final</span><span>&nbsp;DetachedCriteria&nbsp;detachedCriteria,&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;pageSize, &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;startIndex)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;(PaginationSupport)&nbsp;getHibernateTemplate().execute(</span><span class="keyword">new</span><span>&nbsp;HibernateCallback()&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Object&nbsp;doInHibernate(Session&nbsp;session)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;HibernateException&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Criteria&nbsp;criteria&nbsp;=&nbsp;detachedCriteria.getExecutableCriteria(session); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">int</span><span>&nbsp;totalCount&nbsp;=&nbsp;((Integer)&nbsp;criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue(); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;criteria.setProjection(</span><span class="keyword">null</span><span>); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;items&nbsp;=&nbsp;criteria.setFirstResult(startIndex).setMaxResults(pageSize).list(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PaginationSupport&nbsp;ps&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;PaginationSupport(items,&nbsp;totalCount,&nbsp;pageSize,&nbsp;startIndex); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;ps; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;List&nbsp;findAllByCriteria(</span><span class="keyword">final</span><span>&nbsp;DetachedCriteria&nbsp;detachedCriteria)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;(List)&nbsp;getHibernateTemplate().execute(</span><span class="keyword">new</span><span>&nbsp;HibernateCallback()&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Object&nbsp;doInHibernate(Session&nbsp;session)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;HibernateException&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Criteria&nbsp;criteria&nbsp;=&nbsp;detachedCriteria.getExecutableCriteria(session); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;criteria.list(); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;getCountByCriteria(</span><span class="keyword">final</span><span>&nbsp;DetachedCriteria&nbsp;detachedCriteria)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;count&nbsp;=&nbsp;(Integer)&nbsp;getHibernateTemplate().execute(</span><span class="keyword">new</span><span>&nbsp;HibernateCallback()&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Object&nbsp;doInHibernate(Session&nbsp;session)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;HibernateException&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Criteria&nbsp;criteria&nbsp;=&nbsp;detachedCriteria.getExecutableCriteria(session); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;criteria.setProjection(Projections.rowCount()).uniqueResult(); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;count.intValue(); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
</ol>
</div>
</div>
<p><script>render_code();</script></p>
<p>&nbsp;</p>
<p>用户在web层构造查询条件detachedCriteria，和可选的startIndex，调用业务bean的相应findByCriteria方法，返回一个PaginationSupport的实例ps。</p>
<p>ps.getItems()得到已分页好的结果集 <br />
ps.getIndexes()得到分页索引的数组 <br />
ps.getTotalCount()得到总结果数 <br />
ps.getStartIndex()当前分页索引 <br />
ps.getNextIndex()下一页索引 <br />
ps.getPreviousIndex()上一页索引<br />
<br />
<span style="color: red">文章出处:http://www.javaeye.com/topic/14657</span></p>
 <img src ="http://www.blogjava.net/keweibo/aggbug/154776.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-10-21 21:51 <a href="http://www.blogjava.net/keweibo/articles/154776.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分页显示</title><link>http://www.blogjava.net/keweibo/articles/142446.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 03 Sep 2007 13:49:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/142446.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/142446.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/142446.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/142446.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/142446.html</trackback:ping><description><![CDATA[<p>package org.util;</p>
<p><span style="color: #ff00ff">//分页显示</span><br />
public class Pager {</p>
<p>&nbsp;private int currentPage;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff00ff">//当前页</span><br />
&nbsp;private int pageSize = 5;&nbsp;&nbsp;&nbsp;<span style="color: #ff00ff">&nbsp;//每页显示的记录数<br />
</span>&nbsp;private int&nbsp; totalSize;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff00ff">//总记录数<br />
</span>&nbsp;private int totalPage;&nbsp;&nbsp;&nbsp;<span style="color: #ff00ff">&nbsp;//总页数<br />
</span>&nbsp;</p>
<p>&nbsp;private boolean hasFirst;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff00ff">//是否有首页</span><br />
&nbsp;private boolean hasPrevious;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff00ff">//&nbsp;是否有上一页</span><br />
&nbsp;private boolean hasNext;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff00ff">//&nbsp;是否有下一页</span><br />
&nbsp;private boolean hasLast;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff00ff">//&nbsp;是否有尾页<br />
</span><br />
<span style="color: #ff00ff">/**构造函数必须传入两个参数当前页和总记录数<br />
根据当前页可以判断是否有上一页下一页等等,<br />
根据总记录数可以算出总页数*/</span><br />
<span style="color: #0000ff">&nbsp;public Pager(int currentPage,int totalSize){<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;this.currentPage = currentPage;<br />
&nbsp;&nbsp;this.totalSize = totalSize;<br />
&nbsp;}</span><br />
&nbsp;<br />
&nbsp;public int getCurrentPage() {<br />
&nbsp;&nbsp;return currentPage;<br />
&nbsp;}<br />
&nbsp;public void setCurrentPage(int currentPage) {<br />
&nbsp;&nbsp;this.currentPage = currentPage;<br />
&nbsp;}<br />
&nbsp;public boolean isHasFirst() {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;if(currentPage == 1)<br />
&nbsp;&nbsp;&nbsp;return false;<br />
&nbsp;&nbsp;return true;<br />
&nbsp;}<br />
&nbsp;public void setHasFirst(boolean hasFirst) {<br />
&nbsp;&nbsp;this.hasFirst = hasFirst;<br />
&nbsp;}<br />
&nbsp;public boolean isHasLast() {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;if(currentPage == getTotalPage())<br />
&nbsp;&nbsp;&nbsp;return false;<br />
&nbsp;&nbsp;return true;<br />
&nbsp;}<br />
&nbsp;public void setHasLast(boolean hasLast) {<br />
&nbsp;&nbsp;this.hasLast = hasLast;<br />
&nbsp;}<br />
&nbsp;public boolean isHasNext() {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;if(isHasLast())<br />
&nbsp;&nbsp;&nbsp;return true;<br />
&nbsp;&nbsp;return false;<br />
&nbsp;}<br />
&nbsp;public void setHasNext(boolean hasNext) {<br />
&nbsp;&nbsp;this.hasNext = hasNext;<br />
&nbsp;}<br />
&nbsp;public boolean isHasPrevious() {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;if(isHasFirst())<br />
&nbsp;&nbsp;&nbsp;return true;<br />
&nbsp;&nbsp;return false;<br />
&nbsp;}<br />
&nbsp;public void setHasPrevious(boolean hasPrevious) {<br />
&nbsp;&nbsp;this.hasPrevious = hasPrevious;<br />
&nbsp;}<br />
&nbsp;public int getPageSize() {<br />
&nbsp;&nbsp;return pageSize;<br />
&nbsp;}<br />
&nbsp;public void setPageSize(int pageSize) {<br />
&nbsp;&nbsp;this.pageSize = pageSize;<br />
&nbsp;}<br />
&nbsp;public int getTotalPage() {<br />
<span style="color: #ff00ff">&nbsp;&nbsp;//计算出总页数</span><br />
&nbsp;&nbsp;totalPage = totalSize / pageSize;<br />
&nbsp;&nbsp;if(totalSize % pageSize != 0)<br />
&nbsp;&nbsp;&nbsp;totalPage++;<br />
&nbsp;&nbsp;return totalPage;<br />
&nbsp;}<br />
&nbsp;public void setTotalPage(int totalPage) {<br />
&nbsp;&nbsp;this.totalPage = totalPage;<br />
&nbsp;}<br />
&nbsp;public int getTotalSize() {<br />
&nbsp;&nbsp;return totalSize;<br />
&nbsp;}<br />
&nbsp;public void setTotalSize(int totalSize) {<br />
&nbsp;&nbsp;this.totalSize = totalSize;<br />
&nbsp;}<br />
}<br />
</p>
 <img src ="http://www.blogjava.net/keweibo/aggbug/142446.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2007-09-03 21:49 <a href="http://www.blogjava.net/keweibo/articles/142446.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>