﻿<?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-云自无心水自闲-随笔分类-iBatis</title><link>http://www.blogjava.net/usherlight/category/31459.html</link><description>天平山上白云泉，云自无心水自闲。何必奔冲山下去，更添波浪向人间！</description><language>zh-cn</language><lastBuildDate>Tue, 14 Sep 2010 07:52:54 GMT</lastBuildDate><pubDate>Tue, 14 Sep 2010 07:52:54 GMT</pubDate><ttl>60</ttl><item><title>mybatis3.0.2已经发布</title><link>http://www.blogjava.net/usherlight/archive/2010/09/13/331886.html</link><dc:creator>云自无心水自闲</dc:creator><author>云自无心水自闲</author><pubDate>Mon, 13 Sep 2010 04:42:00 GMT</pubDate><guid>http://www.blogjava.net/usherlight/archive/2010/09/13/331886.html</guid><wfw:comment>http://www.blogjava.net/usherlight/comments/331886.html</wfw:comment><comments>http://www.blogjava.net/usherlight/archive/2010/09/13/331886.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/usherlight/comments/commentRss/331886.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/usherlight/services/trackbacks/331886.html</trackback:ping><description><![CDATA[<p>这是mybatis从ibatis更名过来后，发布的第2个版本（第1个版本是3.0.1)。<br />
在这个版本中只修复了4个bug(感觉数目有点少，难道是因为上一个版本的bug真的如此之少?)，增加了一个小功能.<br />
作者的话：尽管只有5个修改，但我还是觉得值得为此发布一个新版本。<br />
这5个修改是：<br />
1、在org.apache.ibatis.Session中增加了一个新方法：void select(String statement, ResultHandler handler); <br />
原来只有：<br />
&nbsp;void select(String statement, Object parameter, ResultHandler handler);<br />
&nbsp;void select(String statement, Object parameter, RowBounds rowBounds, ResultHandler handler);</p>
<p>2、修复了ManagedConnection中关闭连接的问题<br />
3、修复了schema migration中，语句提交(statement commit)不正确的问题<br />
4、修复了延迟加载已经预读取属性时的问题<br />
5、修复了schema migration中，FileInputStream没有正确关闭的问题<br />
</p><img src ="http://www.blogjava.net/usherlight/aggbug/331886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/usherlight/" target="_blank">云自无心水自闲</a> 2010-09-13 12:42 <a href="http://www.blogjava.net/usherlight/archive/2010/09/13/331886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iBatis已经更名为MyBatis，并搬迁到Google Code</title><link>http://www.blogjava.net/usherlight/archive/2010/05/24/321759.html</link><dc:creator>云自无心水自闲</dc:creator><author>云自无心水自闲</author><pubDate>Mon, 24 May 2010 11:58:00 GMT</pubDate><guid>http://www.blogjava.net/usherlight/archive/2010/05/24/321759.html</guid><wfw:comment>http://www.blogjava.net/usherlight/comments/321759.html</wfw:comment><comments>http://www.blogjava.net/usherlight/archive/2010/05/24/321759.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/usherlight/comments/commentRss/321759.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/usherlight/services/trackbacks/321759.html</trackback:ping><description><![CDATA[<p>现在打开iBatis的主页：ibatis.apache.org会发现作者发布了一个新闻或者说是声明。<br />
<br />
大意是因为各种原因，已经把iBatis更名为MyBatis, 并且搬迁到Google Code中了。<br />
<br />
新的主页地址是： <a href="http://www.mybatis.org">http://www.mybatis.org</a><br />
<br />
另外，MyBatis3.0.1的正式版已经在<a href="http://code.google.com/p/mybatis/">http://code.google.com/p/mybatis/</a>可以下载了。<br />
</p><img src ="http://www.blogjava.net/usherlight/aggbug/321759.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/usherlight/" target="_blank">云自无心水自闲</a> 2010-05-24 19:58 <a href="http://www.blogjava.net/usherlight/archive/2010/05/24/321759.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iBatis3正式版的候选版已经释出</title><link>http://www.blogjava.net/usherlight/archive/2010/04/20/318829.html</link><dc:creator>云自无心水自闲</dc:creator><author>云自无心水自闲</author><pubDate>Tue, 20 Apr 2010 03:21:00 GMT</pubDate><guid>http://www.blogjava.net/usherlight/archive/2010/04/20/318829.html</guid><wfw:comment>http://www.blogjava.net/usherlight/comments/318829.html</wfw:comment><comments>http://www.blogjava.net/usherlight/archive/2010/04/20/318829.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/usherlight/comments/commentRss/318829.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/usherlight/services/trackbacks/318829.html</trackback:ping><description><![CDATA[4月17日，iBatis3.0的GA版本的候选版本(candidate)已经在主页上公布出来了（ibatis.apache.org)<br />
根据其描述，只有PMC的投票才会被真正的计算。但是同时又补充说明，其实很多PMC的投票是参考社区用户的投票结果的。<br />
所以也鼓励大家发表自己的看法，并期待大家的反馈。<br />
<br />
原文：<br />
After well over a year of development and testing effort, iBATIS 3.0 is now ready for prime time. I've uploaded the new bundles for iBATIS 3 Core and Migrations. It is this release that we'll vote on for GA status. I'll leave the vote open for a good while (maybe a couple of weeks), just to give everyone a chance to try it out. As usual, only PMC votes actually count, but many PMC members will vote based on the community votes. So please offer your feedback. Otherwise, enjoy iBATIS 3.0!<img src ="http://www.blogjava.net/usherlight/aggbug/318829.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/usherlight/" target="_blank">云自无心水自闲</a> 2010-04-20 11:21 <a href="http://www.blogjava.net/usherlight/archive/2010/04/20/318829.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IBatis3Beta10已经释出，不出意外的话，这就将是最后的GA版</title><link>http://www.blogjava.net/usherlight/archive/2010/03/08/314874.html</link><dc:creator>云自无心水自闲</dc:creator><author>云自无心水自闲</author><pubDate>Mon, 08 Mar 2010 11:50:00 GMT</pubDate><guid>http://www.blogjava.net/usherlight/archive/2010/03/08/314874.html</guid><wfw:comment>http://www.blogjava.net/usherlight/comments/314874.html</wfw:comment><comments>http://www.blogjava.net/usherlight/archive/2010/03/08/314874.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/usherlight/comments/commentRss/314874.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/usherlight/services/trackbacks/314874.html</trackback:ping><description><![CDATA[2月25日，IBatis3发布了Beta10，在主页上宣称，一个月来Beta9的公测都没有收到真正的Bug提交。<br />
所有收到的问题都是新的功能要求。<br />
所以，如果没有意外的话，Beta10将会用于投票表决是否作为GA（General Available）版本。<img src ="http://www.blogjava.net/usherlight/aggbug/314874.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/usherlight/" target="_blank">云自无心水自闲</a> 2010-03-08 19:50 <a href="http://www.blogjava.net/usherlight/archive/2010/03/08/314874.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IBatis3中使用自定义数据源C3P0</title><link>http://www.blogjava.net/usherlight/archive/2010/02/01/311493.html</link><dc:creator>云自无心水自闲</dc:creator><author>云自无心水自闲</author><pubDate>Mon, 01 Feb 2010 04:57:00 GMT</pubDate><guid>http://www.blogjava.net/usherlight/archive/2010/02/01/311493.html</guid><wfw:comment>http://www.blogjava.net/usherlight/comments/311493.html</wfw:comment><comments>http://www.blogjava.net/usherlight/archive/2010/02/01/311493.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/usherlight/comments/commentRss/311493.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/usherlight/services/trackbacks/311493.html</trackback:ping><description><![CDATA[IBatis2中提供了3种DataSource的配置：JNDI, Apache DBCP, IBatis自带的SimpleDataSource。但在IBatis3中只提供了两种DataSource: UNPOOLED, POOLED。<br />
如果要实现自定义的DataSource，就需要通过扩展DataSourceFactory。本文就演示一下这个过程。<br />
准备工作：Connection Pool的选择，通过搜索发现目前比较流行的免费数据库连接池主要有3种：Apache DBCP, C3P0, Proxool。<br />
看了一下，Proxool的最新版本是0.9.1(2008-08-23), C3P0的最新版本是0.9.1.2(2007-05-21), DBCP最新版本是1.2.2(2007-04-04)<br />
好像这3个项目都已经挺长时间没有更新了。但是总体评价上C3P0无论从稳定上还是效率上都要好一点。<br />
（具体这3个项目谁更优秀，并不是本文的重点，本文主要是介绍一下如何在IBatis3中自定义数据源）<br />
大致步骤：<br />
1、实现org.apache.ibatis.datasource.DataSourceFactory接口，主要是2个方法<br />
a、public DataSource getDataSource() 如何具体地得到一个数据源<br />
b、public void setProperties(Properties properties) 如何设置数据源的参数属性<br />
2、实现javax.sql.DataSource，这个就是提供给DataSourceFactory的实例<br />
3、在IBatis3中引用新加入的数据源<br />
<br />
1. 从代码中可以看出，IBatis3与IBatis2不同，不再通过一个Configuration类来进行数据源属性的设置，而是使用反射机制直接调用数据源的方法来设置参数。<br />
这就要求配置文件中的参数名称必须与数据源类中的方法名匹配.<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;C3p0DataSourceFactory&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;DataSourceFactory&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;DataSource&nbsp;dataSource;<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;C3p0DataSourceFactory()&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataSource&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;C3p0DataSource();<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;DataSource&nbsp;getDataSource()&nbsp;{<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;dataSource;<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setProperties(Properties&nbsp;properties)&nbsp;{<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Properties&nbsp;driverProperties&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Properties();<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MetaObject&nbsp;metaDataSource&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;MetaObject.forObject(dataSource);<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(Object&nbsp;key&nbsp;:&nbsp;properties.keySet())&nbsp;{<br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;propertyName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(String)&nbsp;key;<br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(propertyName.startsWith(DRIVER_PROPERTY_PREFIX))&nbsp;{<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;value&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;properties.getProperty(propertyName);<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;driverProperties.setProperty(propertyName<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.substring(DRIVER_PROPERTY_PREFIX_LENGTH),&nbsp;value);<br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(metaDataSource.hasSetter(propertyName))&nbsp;{<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;value&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(String)&nbsp;properties.get(propertyName);<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;convertedValue&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;convertValue(metaDataSource,<br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;propertyName,&nbsp;value);<br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;metaDataSource.setValue(propertyName,&nbsp;convertedValue);<br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">throw</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;DataSourceException(</span><span style="color: #000000;">"</span><span style="color: #000000;">Unkown&nbsp;DataSource&nbsp;property:&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;propertyName);<br />
</span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(driverProperties.size()&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;{<br />
</span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;metaDataSource.setValue(</span><span style="color: #000000;">"</span><span style="color: #000000;">driverProperties</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;driverProperties);<br />
</span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;@SuppressWarnings(</span><span style="color: #000000;">"</span><span style="color: #000000;">unchecked</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br />
</span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;Object&nbsp;convertValue(MetaObject&nbsp;metaDataSource,&nbsp;String&nbsp;propertyName,<br />
</span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;value)&nbsp;{<br />
</span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;convertedValue&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;value;<br />
</span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;targetType&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;metaDataSource.getSetterType(propertyName);<br />
</span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(targetType&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Integer.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;targetType&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">)&nbsp;{<br />
</span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;convertedValue&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Integer.valueOf(value);<br />
</span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(targetType&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Long.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;targetType&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">)&nbsp;{<br />
</span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;convertedValue&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Long.valueOf(value);<br />
</span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(targetType&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Boolean.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;targetType&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">)&nbsp;{<br />
</span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;convertedValue&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Boolean.valueOf(value);<br />
</span><span style="color: #008080;">48</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">49</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;convertedValue;<br />
</span><span style="color: #008080;">50</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">51</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">52</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;String&nbsp;DRIVER_PROPERTY_PREFIX&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">driver.</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">53</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;DRIVER_PROPERTY_PREFIX_LENGTH&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DRIVER_PROPERTY_PREFIX<br />
</span><span style="color: #008080;">54</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.length();<br />
</span><span style="color: #008080;">55</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">56</span>&nbsp;<span style="color: #000000;">}<br />
</span><span style="color: #008080;">57</span>&nbsp;</div>
<br />
2. 数据源类，其中的一堆setter就是用于设置属性的。<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;C3p0DataSource&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;DataSource&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;ComboPooledDataSource&nbsp;dataSource;<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;C3p0DataSource()&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.dataSource&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ComboPooledDataSource();<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;Connection&nbsp;getConnection()&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;SQLException&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;dataSource.getConnection();<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;Connection&nbsp;getConnection(String&nbsp;username,&nbsp;String&nbsp;password)<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;SQLException&nbsp;{<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;dataSource.getConnection(username,&nbsp;password);<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;PrintWriter&nbsp;getLogWriter()&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;SQLException&nbsp;{<br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;dataSource.getLogWriter();<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;getLoginTimeout()&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;SQLException&nbsp;{<br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;dataSource.getLoginTimeout();<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setLogWriter(PrintWriter&nbsp;out)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;SQLException&nbsp;{<br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataSource.setLogWriter(out);<br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setLoginTimeout(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;seconds)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;SQLException&nbsp;{<br />
</span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataSource.setLoginTimeout(seconds);<br />
</span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">synchronized</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setDriver(String&nbsp;driver)&nbsp;{<br />
</span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataSource.setDriverClass(driver);<br />
</span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(Exception&nbsp;e)&nbsp;{<br />
</span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setUrl(String&nbsp;url)&nbsp;{<br />
</span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataSource.setJdbcUrl(url);<br />
</span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setUsername(String&nbsp;username)&nbsp;{<br />
</span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataSource.setUser(username);<br />
</span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">48</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">49</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setPassword(String&nbsp;password)&nbsp;{<br />
</span><span style="color: #008080;">50</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataSource.setPassword(password);<br />
</span><span style="color: #008080;">51</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">52</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">53</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setInitialPoolSize(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;initialPoolSize)&nbsp;{<br />
</span><span style="color: #008080;">54</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataSource.setInitialPoolSize(initialPoolSize);<br />
</span><span style="color: #008080;">55</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">56</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">57</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setMaxPoolSize(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;maxPoolSize)&nbsp;{<br />
</span><span style="color: #008080;">58</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataSource.setMaxPoolSize(maxPoolSize);<br />
</span><span style="color: #008080;">59</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">60</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">61</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setMinPoolSize(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;minPoolSize)&nbsp;{<br />
</span><span style="color: #008080;">62</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataSource.setMinPoolSize(minPoolSize);<br />
</span><span style="color: #008080;">63</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">64</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">65</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setPreferredTestQuery(String&nbsp;preferredTestQuery)&nbsp;{<br />
</span><span style="color: #008080;">66</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataSource.setPreferredTestQuery(preferredTestQuery);<br />
</span><span style="color: #008080;">67</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">68</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">69</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setPoolPingQuery(String&nbsp;poolPingQuery)&nbsp;{<br />
</span><span style="color: #008080;">70</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataSource.setPreferredTestQuery(poolPingQuery);<br />
</span><span style="color: #008080;">71</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">72</span>&nbsp;<span style="color: #000000;">}</span></div>
<br />
3. 在配置文件Configuration.xml中，可以先定义数据源的别称，然后就象POOLED和UNPOOLED一样使用别称来引用数据源。<br />
&lt;Configuration&gt;<br />
&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; &lt;typeAlias&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;typeAlias type="com.test.datasource.C3p0DataSourceFactory" alias="C3P0"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/typeAlias&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;environments default="development"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;environment id="development"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;transactionManager type="JDBC"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dataSource type="C3P0"&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="driver" value="${jdbc.driver}"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="url" value="${jdbc.url}"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="username" value="${jdbc.username}"/&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="password" value="${jdbc.password}"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="poolPingQuery" value="${pingquery}"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/dataSource&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/environment&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;/environments&gt; <br />
&nbsp;&nbsp;&nbsp; ...<br />
&lt;Configuration&gt;<br />
<br />
<br />
<br /><img src ="http://www.blogjava.net/usherlight/aggbug/311493.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/usherlight/" target="_blank">云自无心水自闲</a> 2010-02-01 12:57 <a href="http://www.blogjava.net/usherlight/archive/2010/02/01/311493.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IBatis3临近发布正式版了</title><link>http://www.blogjava.net/usherlight/archive/2010/01/15/309705.html</link><dc:creator>云自无心水自闲</dc:creator><author>云自无心水自闲</author><pubDate>Fri, 15 Jan 2010 12:49:00 GMT</pubDate><guid>http://www.blogjava.net/usherlight/archive/2010/01/15/309705.html</guid><wfw:comment>http://www.blogjava.net/usherlight/comments/309705.html</wfw:comment><comments>http://www.blogjava.net/usherlight/archive/2010/01/15/309705.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/usherlight/comments/commentRss/309705.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/usherlight/services/trackbacks/309705.html</trackback:ping><description><![CDATA[IBatis3的Beta8版本已经发布了，在官方网站上声称目前的版本已经非常稳定，只有4个已知的问题，其中2个是非功能性的。作者宣称，这样的状况使它对于近期发布GA版本充满信心。<br />
那么IBatis3与IBatis2相比，究竟变化在哪里呢？<br />
最重要的变化是IBatis3中引入了接口绑定（Interface Binding）的概念。在IBatis2中，没有应用Java5的泛型，所以需要大量使用强制类型转换，比如：<br />
Employee employee = (Employee)sqlMapper.queryForList("getEmployee", 5);<br />
//...and...<br />
List employees = sqlMapper.queryForList("listAllEmployees");<br />
但是在IBatis3中，方法改变成：<br />
MapperFactory factory = someConfiguration.buildMapperFactory();<br />
EmployeeMapper employeeMapper = factory.getMapper (EmployeeMapper.class);<br />
Employee emp = empMapper.getEmployee(5);<br />
//...and...<br />
List&lt;Employee&gt; employees = empMapper.listAllEmployees();<br />
所以IBatis3至少需要使用Java5以上的版本。上面代码中，EmployeeMapper是一个自定义的接口（注意，开发人员只需要定义一个接口，不需要提供具体的实现）<br />
public interface EmployeeMapper {<br />
&nbsp; Employee getEmployee (int employeeId);<br />
&nbsp; List&lt;Employee&gt; listAllEmployees();<br />
}<br />
这样就行了，IBatis会自动为你生成接口的具体实现。是不是感觉有点酷？<img src ="http://www.blogjava.net/usherlight/aggbug/309705.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/usherlight/" target="_blank">云自无心水自闲</a> 2010-01-15 20:49 <a href="http://www.blogjava.net/usherlight/archive/2010/01/15/309705.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tapestry最新版5.1.0.5教程（七）：与IBatis3的整合</title><link>http://www.blogjava.net/usherlight/archive/2010/01/06/308415.html</link><dc:creator>云自无心水自闲</dc:creator><author>云自无心水自闲</author><pubDate>Wed, 06 Jan 2010 04:20:00 GMT</pubDate><guid>http://www.blogjava.net/usherlight/archive/2010/01/06/308415.html</guid><wfw:comment>http://www.blogjava.net/usherlight/comments/308415.html</wfw:comment><comments>http://www.blogjava.net/usherlight/archive/2010/01/06/308415.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/usherlight/comments/commentRss/308415.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/usherlight/services/trackbacks/308415.html</trackback:ping><description><![CDATA[与现在最流行的SSH相比较，Tapestry能够完全替代其中Struts2和Spring，但是他还是需要一个ORM的框架。IBatis由于比较低的学习曲线，也受到很多人的喜爱。尤其是在IBatis3中引入了许多新的概念和想法，使用更加安全和便利。<br zid="2" />
本文主要介绍如何将Tapestry5.1和IBatis3进行整合。<br zid="3" />
简要步骤：<br zid="4" />
1. 准备工作<br zid="5" />
2. 数据库的建立<br zid="6" />
3. POJO的建立<br zid="7" />
4. IBatis相关配置文件的创建<br zid="8" />
5. Tapestry相关代码的完成<br zid="9" />
概要说明：<br zid="10" />
1、准备工作。这一部分是比较简单的，Eclipse之类的开发环境是必需的。Tapestry5.1、IBatis3（目前还是Beta7）、数据库（我使用的是MySql）的下载安装。<br zid="11" />
2、数据库的建立，由于是示例，所以数据库的建立也非常简单，只有一张User表，3个字段，Id，Name，Password<br zid="12" />
3、com.sample.User类，对应数据库表的3个字段，生成User类<br zid="13" />
4、IBatis配置文件：Configuration.xml，UserMapper.xml，jdbc.properties的生成, 前两个必需，最后一个可选.<br zid="14" />
5、在AppModule里，使用build方法, 添加服务生成IBatis3的SqlSessionFactory, 在需要使用SqlSessionFactory的地方，使用@InjectService注入即可<br zid="15" />
详细说明：<br zid="16" />
1、大家到各自的网站上下载相应的包好了。我只罗列一下我所用到的Lib：<br zid="23" />
<span zid="151">&nbsp;&nbsp;&nbsp;&nbsp;</span>antlr-runtime-3.1.1.jar<br zid="24" />
<span zid="152">&nbsp;&nbsp;&nbsp;&nbsp;</span>commons-codec-1.3.jar<br zid="25" />
<span zid="154">&nbsp;&nbsp;&nbsp; </span>commons-lang-2.4.jar<br zid="27" />
<span zid="156">&nbsp;&nbsp;&nbsp; </span>ibatis-3-core-3.0.0.216.jar<br zid="29" />
<span zid="157">&nbsp;&nbsp;&nbsp;&nbsp;</span>javassist.jar<br zid="30" />
<span zid="158">&nbsp;&nbsp;&nbsp;&nbsp;</span>log4j-1.2.14.jar<br zid="31" />
<span zid="159">&nbsp;&nbsp;&nbsp;&nbsp;</span>mysql-connector-java-5.0.5.jar<br zid="32" />
<span zid="160">&nbsp;&nbsp;&nbsp;&nbsp;</span>slf4j-api-1.5.10.jar<br zid="33" />
<span zid="161">&nbsp;&nbsp;&nbsp;&nbsp;</span>slf4j-log4j12-1.5.10.jar<br zid="34" />
<span zid="162">&nbsp;&nbsp;&nbsp;&nbsp;</span>stax2-api-3.0.1.jar<br zid="35" />
<span zid="163">&nbsp;&nbsp;&nbsp;&nbsp;</span>tapestry-core-5.1.0.5.jar<br zid="36" />
<span zid="164">&nbsp;&nbsp;&nbsp;&nbsp;</span>tapestry-ioc-5.1.0.5.jar<br zid="37" />
<span zid="165">&nbsp;&nbsp;&nbsp;&nbsp;</span>tapestry5-annotations-5.1.0.5.jar<br zid="38" />
<span zid="166">&nbsp;&nbsp;&nbsp;&nbsp;</span>woodstox-core-lgpl-4.0.7.jar<br zid="17" />
2、Create Table<br zid="39" />
DROP TABLE IF EXISTS `test`.`user`;<br zid="40" />
CREATE TABLE&nbsp; `test`.`user` (<br zid="41" />
&nbsp; `id` int(10) unsigned NOT NULL AUTO_INCREMENT,<br zid="42" />
&nbsp; `name` varchar(45) NOT NULL,<br zid="43" />
&nbsp; `password` varchar(45) NOT NULL,<br zid="44" />
&nbsp; PRIMARY KEY (`id`)<br zid="45" />
) ENGINE=InnoDB;<br zid="46" />
<br zid="18" />
3、<br zid="175" />
package com.sample.model;<br zid="47" />
public class User {<br zid="48" />
&nbsp;&nbsp;&nbsp; private long id;<br zid="49" />
&nbsp;&nbsp;&nbsp; private String name;<br zid="50" />
&nbsp;&nbsp;&nbsp; private String password;<br zid="51" />
&nbsp; &nbsp; // getter and setter &nbsp;&nbsp; ....<br zid="52" />
}<br zid="176" />
<br zid="19" />
4、我把Configuration.xml和UserMapper.xml都放在src目录下，这样在部署的时候，就是生成在classes，也就是类路径的根目录下。<br zid="177" />
Configuration.xml:<br zid="53" />
&lt;?xml version="1.0" encoding="UTF-8" ?&gt; <br zid="54" />
&lt;!DOCTYPE configuration <br zid="55" />
&nbsp; PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" <br zid="56" />
&nbsp; "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"&gt;&nbsp; <br zid="57" />
&lt;configuration&gt; <br zid="58" />
&nbsp;&nbsp;&nbsp; &lt;properties resource="jdbc.properties"&gt;<br zid="59" />
&nbsp;&nbsp;&nbsp; &lt;/properties&gt;<br zid="64" />
&nbsp;&nbsp;&nbsp; &lt;environments default="development"&gt; <br zid="65" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;environment id="development"&gt; <br zid="66" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;transactionManager type="JDBC"/&gt; <br zid="67" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dataSource type="POOLED"&gt; <br zid="68" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="driver" value="${jdbc.driver}"/&gt; <br zid="69" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="url" value="${jdbc.url}"/&gt; <br zid="70" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="username" value="${jdbc.username}"/&gt; <br zid="71" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="password" value="${jdbc.password}"/&gt;<br zid="72" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="poolPingEnabled" value="${pingenable}"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br zid="73" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="poolPingQuery" value="${pingquery}"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br zid="74" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="poolPingConnectionsNotUsedFor" value="${pingnotusetime}"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br zid="75" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/dataSource&gt; <br zid="76" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/environment&gt; <br zid="77" />
&nbsp;&nbsp;&nbsp; &lt;/environments&gt; <br zid="78" />
&nbsp;&nbsp;&nbsp; &lt;mappers&gt; <br zid="79" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mapper resource="UserMapper.xml"/&gt; <br zid="80" />
&nbsp;&nbsp;&nbsp; &lt;/mappers&gt; <br zid="81" />
&lt;/configuration&gt; <br zid="82" />
<br zid="168" />
<br zid="83" />
UserMapper.xml:<br zid="169" />
&lt;?xml version="1.0" encoding="UTF-8" ?&gt;&nbsp; <br zid="85" />
&lt;!DOCTYPE mapper&nbsp; <br zid="86" />
&nbsp;&nbsp;&nbsp; PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"&nbsp; <br zid="87" />
&nbsp;&nbsp;&nbsp; "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"&gt;<br zid="88" />
&nbsp;&nbsp;&nbsp; <br zid="89" />
&lt;mapper namespace="com.sample.model.UserMapper"&gt;<br zid="90" />
&nbsp;&nbsp;&nbsp; &lt;select id="selectUser" parameterType="int" resultType="com.sample.model.User"&gt;&nbsp; <br zid="91" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select * from user where id = #{id}&nbsp; <br zid="92" />
&nbsp;&nbsp;&nbsp; &lt;/select&gt;<br zid="93" />
&lt;/mapper&gt; <br zid="94" />
<br zid="95" />
<br zid="170" />
<br zid="171" />
jdbc.properties:<br zid="96" />
jdbc.driver=com.mysql.jdbc.Driver<br zid="97" />
jdbc.url=jdbc:mysql://localhost/test?autoReconnect=true<br zid="98" />
jdbc.username=root<br zid="99" />
jdbc.password=root<br zid="100" />
pingenable=true<br zid="101" />
pingquery=SELECT 1<br zid="102" />
pingoldertime=0<br zid="103" />
pingnotusetime=3600000<br zid="104" />
<br zid="20" />
5、<br zid="172" />
package com.sample.web.services;<br zid="21" />
public class AppModule {<br zid="105" />
&nbsp;&nbsp;&nbsp; public static SqlSessionFactory buildSqlSessionFactory() {<br zid="106" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br zid="107" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String resource = "Configuration.xml";<br zid="108" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Reader reader = Resources.getResourceAsReader(resource);<br zid="109" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return new SqlSessionFactoryBuilder().build(reader);<br zid="110" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (Exception e) {<br zid="111" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; logger.warn("failed to build SqlSessionFactory: ", e);<br zid="112" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return null;<br zid="113" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br zid="114" />
&nbsp;&nbsp;&nbsp; }<br zid="115" />
<br zid="116" />
&nbsp;&nbsp;&nbsp; private static Logger logger = LoggerFactory.getLogger(AppModule.class);<br zid="117" />
}<br zid="118" />
<br zid="119" />
<br zid="173" />
package com.sample.model;<br zid="120" />
public interface UserMapper {<br zid="121" />
&nbsp;&nbsp;&nbsp; public User selectUser(int id);<br zid="122" />
}<br zid="123" />
<br zid="124" />
<br zid="174" />
package com.pc.sample.web.pages;<br zid="125" />
public class Layout {<br zid="126" />
&nbsp;&nbsp;&nbsp; @InjectService("SqlSessionFactory")<br zid="127" />
&nbsp;&nbsp;&nbsp; private SqlSessionFactory sqlMapper;<br zid="128" />
&nbsp;&nbsp;&nbsp; public String getUserName() {<br zid="129" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ( sqlMapper == null ) {<br zid="130" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return "null-mapper";<br zid="131" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br zid="132" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SqlSession session = sqlMapper.openSession();<br zid="133" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br zid="134" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; UserMapper userMapper = session.getMapper(UserMapper.class);<br zid="135" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ( userMapper == null ) {<br zid="136" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return "null-userMapper";<br zid="137" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br zid="138" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; User user = userMapper.selectUser(1);<br zid="139" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ( user == null ) {<br zid="140" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return "null-user";<br zid="141" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br zid="142" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return user.getName();<br zid="143" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (Exception e) {<br zid="144" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return "exception-" + e.getMessage();<br zid="145" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } finally {<br zid="146" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; session.close();<br zid="147" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br zid="148" />
&nbsp;&nbsp;&nbsp; }<br zid="149" />
}<br zid="150" />
<br zid="178" />
几个注意事项：<br zid="179" />
1，
因为我的IBatis的配置文件Configuration.xml是放在类路径的根目录下，所以在初始化SqlSessionFactory的时候，直
接用String resource =
"Configuration.xml";就行了，否则需要添加相应的路径，比如：把Configuration.xml与User类放在一起，也就是在
com.sample.model这个package中，那么就要写成：String resource =
"com/sample/model/Configuration.xml";<br zid="180" />
同样，在Configuration.xml中，指定UserMapper.xml的规则也是这样的。<br zid="181" />
2，UserMapper的使用。Mapper的使用是IBatis3中才有的新功能，也是IBatis用户指南中推荐使用的方式。因为这样使用的话，就完全避免了类型的强制转换，实现了类型安全。<br zid="182" />
需要注意的是UserMapper只是一个接口。我们不需要提供这个接口的具体实现。IBatis3会自动生成一个具体的实例。<br zid="183" />
<br zid="184" />
其中的方法名必须与UserMapper.xml中的select语句的id一样。在我的例子中是selectUser.<br zid="185" />
另外，此方法的返回值的类型必须与UserMapper.xml中配置的returnType一致。<br zid="186" />
最后要提醒的是UserMapper.xml中的namespace必须是UserMapper的全类名,在本例中就是com.sample.model.UserMapper<br zid="22" /><img src ="http://www.blogjava.net/usherlight/aggbug/308415.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/usherlight/" target="_blank">云自无心水自闲</a> 2010-01-06 12:20 <a href="http://www.blogjava.net/usherlight/archive/2010/01/06/308415.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>介绍作为iBatis辅助工具的iBator的使用方法</title><link>http://www.blogjava.net/usherlight/archive/2009/10/07/297401.html</link><dc:creator>云自无心水自闲</dc:creator><author>云自无心水自闲</author><pubDate>Wed, 07 Oct 2009 12:18:00 GMT</pubDate><guid>http://www.blogjava.net/usherlight/archive/2009/10/07/297401.html</guid><wfw:comment>http://www.blogjava.net/usherlight/comments/297401.html</wfw:comment><comments>http://www.blogjava.net/usherlight/archive/2009/10/07/297401.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/usherlight/comments/commentRss/297401.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/usherlight/services/trackbacks/297401.html</trackback:ping><description><![CDATA[<p>目前从实际应用来看，ORM的老大自然是Hibernate，可是iBatis因为相对比较直观、学习曲线相对较低，因而也赢得了不少用户的青睐。<br />
本文主要介绍作为iBatis辅助工具的iBator的使用方法。<br />
iBator是一个iBatis相关代码的自动生成工具。<br />
1、安装iBator的插件<br />
在Eclipse中，使用添加站点的方法，输入网址http://ibatis.apache.org/tools/ibator，进行iBator的安装。<br />
2、建议不要直接在使用iBatis的项目里直接使用iBator，推荐另外单独建立一个项目来生成。比如，建立一个项目叫：IbatorPrj<br />
3、右键点击IbatorPrj这个项目，如果刚才的插件安装正确的话，就会看到一个&#8220;Add iBATOR to the build path&#8221;的选项，点击一下。<br />
4、创建iBator的配置文件。下面是我的例子，大家在实际使用的过程中，需要根据自己的情况进行相应的修改。<br />
主要就是数据库JDBC库的路径、数据库驱动的类名、项目的名称、包名等。<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE ibatorConfiguration<br />
&nbsp; PUBLIC "-//Apache Software Foundation//DTD Apache iBATIS Ibator Configuration 1.0//EN"<br />
&nbsp; "http://ibatis.apache.org/dtd/ibator-config_1_0.dtd"&gt;</p>
<p>&lt;ibatorConfiguration&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;classPathEntry location="c:\javaLibs\MySql\mysql-connector-java-5.0.6-bin.jar" /&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ibatorContext id="SampleiBator" targetRuntime="Ibatis2Java5"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;jdbcConnection driverClass="com.mysql.jdbc.Driver"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connectionURL="jdbc:mysql://localhost/sample" userId="root" password="admin"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/jdbcConnection&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;javaTypeResolver&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="forceBigDecimals" value="false" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/javaTypeResolver&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;javaModelGenerator targetPackage="com.sample"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; targetProject="IbatorPrj\src"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="enableSubPackages" value="true" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="trimStrings" value="true" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/javaModelGenerator&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;sqlMapGenerator targetPackage="com.sample.xml"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; targetProject="IbatorPrj\src"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="enableSubPackages" value="true" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/sqlMapGenerator&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;daoGenerator type="GENERIC-CI" targetPackage="com.sample.dao"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; targetProject="IbatorPrj\src"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="enableSubPackages" value="true" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/daoGenerator&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;table schema="sample" tableName="tab1" domainObjectName="JavaBean1"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="useActualColumnNames" value="false" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generatedKey column="ID" sqlStatement="MySql" identity="true" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/table&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ibatorContext&gt;<br />
&lt;/ibatorConfiguration&gt;<br />
5、配置文件生成完毕后，右键点击这个文件，选择&#8220;Generate iBatis Artifact&#8221;，然后你就在配置的文件夹下找到自动生成的文件了。</p><img src ="http://www.blogjava.net/usherlight/aggbug/297401.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/usherlight/" target="_blank">云自无心水自闲</a> 2009-10-07 20:18 <a href="http://www.blogjava.net/usherlight/archive/2009/10/07/297401.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iBatis使用mysql，数据库超时自动关闭问题的解决</title><link>http://www.blogjava.net/usherlight/archive/2008/05/13/200164.html</link><dc:creator>云自无心水自闲</dc:creator><author>云自无心水自闲</author><pubDate>Tue, 13 May 2008 03:08:00 GMT</pubDate><guid>http://www.blogjava.net/usherlight/archive/2008/05/13/200164.html</guid><wfw:comment>http://www.blogjava.net/usherlight/comments/200164.html</wfw:comment><comments>http://www.blogjava.net/usherlight/archive/2008/05/13/200164.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/usherlight/comments/commentRss/200164.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/usherlight/services/trackbacks/200164.html</trackback:ping><description><![CDATA[iBatis自己带了一个simple的数据库连接池，基本的功能都有。但是在处理部分数据库（比如mysql）的连接空闲时间太长（mysql是8小时）自动超时的时候，就比不上象c3p0这样的连接池软件了（c3p0能自动处理数据库连接被关闭的情况)。<br id="oaq02" />
我目前采用的方法是iBatis本身提供的一种算得上是取巧的办法，基本思想就是每隔一段时间往数据库发一条查询语句，这样使得数据库空闲时间不会太长，而使得其自动关闭。<br id="oaq03" />
方法是在SqlMapConfig.xml的dataSource进行如下配置：<br id="oaq04" />
&lt;dataSource type="SIMPLE"&gt;<br id="oaq05" />
&nbsp;&nbsp;&nbsp; &lt;property name="JDBC.Driver" value="${jdbc.driverClassName}"/&gt;<br id="oaq06" />
&nbsp;&nbsp;&nbsp; &lt;property name="JDBC.ConnectionURL" value="${jdbc.url}"/&gt;<br id="oaq07" />
&nbsp;&nbsp;&nbsp; &lt;property name="JDBC.Username" value="${jdbc.username}"/&gt;<br id="oaq08" />
&nbsp;&nbsp;&nbsp; &lt;property name="JDBC.Password" value="${jdbc.password}"/&gt;<br id="oaq09" />
&nbsp;&nbsp;&nbsp; &lt;property name="Pool.PingEnabled" value="true"/&gt;<br id="oaq010" />
&nbsp;&nbsp;&nbsp; &lt;property name="Pool.PingQuery" value="select 1"/&gt;<br id="oaq011" />
&nbsp;&nbsp;&nbsp; &lt;property name="Pool.PingConnectionsOlderThan" value="0"/&gt;<br id="oaq012" />
&nbsp;&nbsp;&nbsp; &lt;property name="Pool.PingConnectionsNotUsedFor" value="3600000"/&gt; <br id="oaq013" />
&lt;/dataSource&gt;<br id="oaq014" />
开始的３行是关于数据库连接信息的，不需要说明了。<br id="oaq015" />
Pool.PingEnabled：是用于设置开启是否允许检测连接状态<br id="oaq016" />
Pool.PingQuery：是用于检测连接的查询语名，当然是越简单越好<br id="oaq017" />
Pool.PingConnectionOlderThan：对持续连接时间超过设定值（毫秒）的连接进行检测，我将其设置为０（不进行此项检测），否则，iBatis在超过这个时间后，执行每个sql以前检测连接，对于性能可能会有一定的影响。<br id="oaq018" />
Pool.PingConnectionsNotUsedFor：对空闲超过设定值（毫秒）的连接进行检测，我设置为1小时（mysql缺省的关闭时间是8小时)<br id="j_7.0" />
<br id="j_7.1" />
当然，还有一个办法是使用c3p0这样的连接池<br id="j_7.2" />
但是需要自己写一部分代码，实现以下接口：
<pre id="j_7.3" style="margin: 0em;">public interface DataSourceFactory {<br id="j_7.4" />
public void initialize(Map map);<br id="j_7.5" />
public DataSource getDataSource();<br id="j_7.6" />
}</pre><img src ="http://www.blogjava.net/usherlight/aggbug/200164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/usherlight/" target="_blank">云自无心水自闲</a> 2008-05-13 11:08 <a href="http://www.blogjava.net/usherlight/archive/2008/05/13/200164.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>