﻿<?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-文章分类-myBatis</title><link>http://www.blogjava.net/keweibo/category/50241.html</link><description>一专  Java 多能  Delphi,Powerbuilder ... </description><language>zh-cn</language><lastBuildDate>Wed, 30 Nov 2011 09:11:14 GMT</lastBuildDate><pubDate>Wed, 30 Nov 2011 09:11:14 GMT</pubDate><ttl>60</ttl><item><title>MyBatis insert操作返回主键(轉)</title><link>http://www.blogjava.net/keweibo/articles/365211.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Wed, 30 Nov 2011 08:06:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/365211.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/365211.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/365211.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/365211.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/365211.html</trackback:ping><description><![CDATA[<p><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;">原文:</span></span></span><a href="http://289972458.iteye.com/blog/1001851">http://289972458.iteye.com/blog/1001851</a><br /><br />在使用MyBatis做持久层时，insert语句默认是不返回记录的主键值，而是返回插入的记录条数；如果业务层需要得到记录的主键时，可以通过配置的方式来完成这个功能<br /></p><p><span style="line-height: 21px; font-family: verdana, sans-serif;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;">针对Sequence主键而言，在执行insert sql前必须指定一个主键值给要插入的记录，如Oracle、DB2，可以采用如下配置方式：</span></span></span></span></p><p><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;">&lt;insert id="add" parameterType="vo.Category"&gt;</span></span></span></p><p style="margin: 0px;"><span style="font-size: small;"><span style="white-space: pre;">		</span>&lt;selectKey resultType="java.lang.Short" order="BEFORE" keyProperty="id"&gt;</span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">			</span><span style="line-height: 21px; font-family: verdana, sans-serif;">SELECT SEQ_TEST.NEXTVAL FROM DUAL</span></span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>&lt;/selectKey&gt;</span></span></span></p><p><span style="font-size: small;"><span style="white-space: pre;">		</span>insert into category (name_zh, parent_id,</span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>show_order, delete_status, description</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>)</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>values (#{nameZh,jdbcType=VARCHAR},</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>#{parentId,jdbcType=SMALLINT},</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>#{showOrder,jdbcType=SMALLINT},</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>#{deleteStatus,jdbcType=BIT},</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>#{description,jdbcType=VARCHAR}</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>)</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;">&lt;/insert&gt;</span></span></span></p><p><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><br /></span></span></span><span style="line-height: 21px; font-family: verdana, sans-serif;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;">针对自增主键的表，在插入时不需要主键，而是在插入过程自动获取一个自增的主键，比如MySQL，可以采用如下两种配置方式：</span></span></span></span></p><p><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;">&lt;insert id="add" parameterType="vo.Category" useGeneratedKeys="true" keyProperty="id"&gt;</span></span></span></p><p><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>insert into category (name_zh, parent_id,</span></span></span></p><p><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>show_order, delete_status, description</span></span></span></p><p><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>)</span></span></span></p><p><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>values (#{nameZh,jdbcType=VARCHAR},</span></span></span></p><p><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>#{parentId,jdbcType=SMALLINT},</span></span></span></p><p><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>#{showOrder,jdbcType=SMALLINT}, </span></span></span></p><p><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>#{deleteStatus,jdbcType=BIT}, </span></span></span></p><p><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>#{description,jdbcType=VARCHAR}</span></span></span></p><p><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>)</span></span></span></p><p><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;">&lt;/insert&gt;</span></span></span><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><br /></span></span></span></p><p><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;">或</span></span></span></p><p><span style="font-size: x-small;"></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;">&lt;insert id="add" parameterType="vo.Category"&gt;</span></span></span></p><p style="margin: 0px;"><span style="font-size: small;"><span style="white-space: pre;">		</span>&lt;selectKey resultType="java.lang.Short" order="AFTER" keyProperty="id"&gt;</span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">			</span>SELECT LAST_INSERT_ID() AS id</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>&lt;/selectKey&gt;</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>insert into category (name_zh, parent_id,</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>show_order, delete_status, description</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>)</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>values (#{nameZh,jdbcType=VARCHAR},</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>#{parentId,jdbcType=SMALLINT},</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>#{showOrder,jdbcType=SMALLINT},</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>#{deleteStatus,jdbcType=BIT},</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>#{description,jdbcType=VARCHAR}</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><span style="white-space: pre;">		</span>)</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;">&lt;/insert&gt;</span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;"><br /></span></span></span></p><p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: small;"><span style="font-size: small;">在插入操作完成之后，参数category的id属性就已经被赋值了</span></span></span></p><img src ="http://www.blogjava.net/keweibo/aggbug/365211.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-11-30 16:06 <a href="http://www.blogjava.net/keweibo/articles/365211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><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></channel></rss>