<?xml version="1.0" encoding="utf-8" ?>
<!-- generator="FEEDCREATOR_VERSION" -->
<rss version="2.0" xmlns:sns="http://blog.sina.com.cn/sns">
    <channel>
        <title>李羽东的BLOG</title>
        <description></description>
        <link>http://blog.sina.com.cn/featheast</link>
        <lastBuildDate>Fri, 08 Jan 2010 12:39:37 GMT+8</lastBuildDate>
        <generator>FEEDCREATOR_VERSION</generator>
        <language>zh-cn</language>
        <copyright>Copyright 1996 - 2009 SINA Inc. All Rights Reserved.</copyright>
        <pubDate>Fri, 08 Jan 2010 04:39:37 GMT+8</pubDate>
        <item>
            <title>正式搬家至www.featheast.com</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100bfqa.html</link>
            <description><![CDATA[本博客至今日起正式停用，新博客地址为：<br />
<div STYLE="text-align: center; color: rgb(255, 0, 0);">
<font STYLE="font-size: 56px;"><a HREF="http://www.featheast.com">www.featheast.com</A><br /></FONT>
<div STYLE="text-align: left;"><br /></DIV>
</DIV>]]></description>
            <author>featheast</author>
            <category>生活百态</category>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100bfqa.html#comment</comments>
            <pubDate>Mon, 08 Dec 2008 03:34:16 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100bfqa.html</guid>
        </item>
        <item>
            <title>Semester 2 Summary</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100bf1y.html</link>
            <description><![CDATA[<p>433-620 Engineering of Web Application</P>
<p>Before this semester, this subject is used to be the most
difficult one which leads a consequence that many students decided
not to take this one. What surprised us most is that after 4
months, this subject turns to be not only the easiest one for
process, but also the easiest one for examination, even the most
interesting and practical one. In Uni of Mel, subjects are more
likely to prefer academic stuff, the chance to learn industry
programming is more possible happended in your own room. But Steve
actually gives us a wonderful series introduction of the whole are
of web application. To be honestly, nobody will expect to learn a
great from such a short time, but his enthusiasm and funny indeed
stimulate me a lot to learn something new, and also this is a great
opportunity to practice your American English, which made me
believe me more American English is really simple and easy to
understand. Back to the track, This subject consists of small
assignments each week, most of them are tiny enough to finish in
class since every week just has one hour lecture with another 2
hours workshop. The final project is your choice to do anything you
like. I chose to use Google Map API to make a mash-up with local
restaurant, using prototype framework for the ajax and iBatis for
persistent layer. Not too difficult, and everthing is up to
you.</P>
<p>&nbsp;</P>
<p>433-652 Distributed System</P>
<p>Even until now, I still cannot trust how can I get such a low
mark for the final project. But I can do nothing because the marks
have already submitted to the uni system. This subject is taught by
two PhD, Srikumar and Broberg, one Indian and one Aussie. Most of
the contents are inhereted from Buyya, just exchange some sequence
among them. As a compulsory for my degree, which is really useful
for the subject itself, but too many materials need to cover for
those 12 weeks, and really many important points are ignored during
the teaching like p2p, etc. This subject consists of two projects,
one is a socket programming and another is for RMI. Not difficult,
but you need to satisfy all the basic requirements, and something
innovative is welcomed. I guess the reason I lose the marks is
because of this.</P>
<p>&nbsp;</P>
<p>433-653 Mobile Computing</P>
<p>The first time I heard about this course is during a seminar
last semester when talking about Netbeans 6.0 (now 6.5 is
released). One Chinese student talking about mobile games in that
seminar gives us a great impression about this perfect subject. And
what I agree is this subject is really great. First, the lecturer
is the most responsibility person I have met in this department,
Lars Kulik, from Germany, as the nature of Germans. His English is
pretty fast but really easy to catch, unlike what I will mention in
last subject. And Lars like to give us hint to lead us go through
the process, not only to introduce the knowledge, but also taught
us how to think to solve these problems. Also he is quite generous
considering the marks. In class, every 4 person will make up a team
to do a formal presentation which lasts one hour, and also will
take a programming project to do anything you like on mobile
device. Before this class, what I think of mobile computing is J2ME
or Win Mobile. Now I started to know there is a great area around
this, and many of those contents are related to telecommunication
area.</P>
<p>&nbsp;</P>
<p>433-684 Machine Learning</P>
<p>The very first thing I want to say is the English accent of the
lecturer, even now after 12 weeks I still cannot catch up all of
the speaking. Timothy Baldwin, from Norway, is the most wierd
English I have ever heard. Not only me, but also some local student
feels a little strange. Anyway, he is
really&nbsp;a&nbsp;good lecturer especially
for Machine Learning area. Before this semester, Roger told me that
the process of this subject will be tough, but the result will be
sunshine after raining. That is really what I feel after
my&nbsp;first whole-night work before the final project
submitting. But when you came to&nbsp;class and
saw&nbsp;most&nbsp;of the students are in
the same situation with same bloody eyes,&nbsp;every
anger inside&nbsp;disappears. Really difficult
subject,&nbsp;with two&nbsp;presentations
one for lab and one for research, and one mid-semester test and one
big project talking about distinguish satire news from normal news
and the final &nbsp;project. I am a little regret after
taking it 'cause I felt if I won't develop in research area, this
stuff will be meaningless to mean. However, it is quite useful if I
must do some research in future. paradox...</P>]]></description>
            <author>featheast</author>
            <category>痛苦学习</category>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100bf1y.html#comment</comments>
            <pubDate>Fri, 05 Dec 2008 14:15:43 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100bf1y.html</guid>
        </item>
        <item>
            <title>Change</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100bdwk.html</link>
            <description><![CDATA[I am thinking about change my blogger to WordPress, anybody give
some suggestions?]]></description>
            <author>featheast</author>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100bdwk.html#comment</comments>
            <pubDate>Tue, 02 Dec 2008 08:55:27 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100bdwk.html</guid>
        </item>
        <item>
            <title>Feedback on project</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100b963.html</link>
            <description><![CDATA[The following are general comments on the project marking:<br />
<br />
Overall good standard of work.<br />
Wide range of features explored in a lot of papers beyond the most
&nbsp;<br />
obvious bag-of-words techniques.<br />
<br />
But there are a few areas where lots of people made similar
mistakes &nbsp;<br />
which didn't result in much of a mark reduction on their own but
are &nbsp;<br />
very easy to avoid:<br />
<br />
&nbsp;&nbsp; &nbsp;Use the
style file, or try and match the sample documents. At a
&nbsp;<br />
minimum, you should have a two-column conference paper style layout
&nbsp;<br />
and a serif font (another simple thing where people lost marks was
not &nbsp;<br />
running a spell-checker before submission).<br />
&nbsp;&nbsp; &nbsp;On similar
lines, try and stick to the standard conference paper
&nbsp;<br />
structure (along the lines of Introduction, Background,
Methodology, &nbsp;<br />
Results, Discussion) - except where it doesn't make sense -
spending &nbsp;<br />
too long explaining a shared task is not necessary. Also, the
writing &nbsp;<br />
style from these is a good model - the tone of the papers was not
&nbsp;<br />
always academic enough. Sticking to a structure like this also
tends &nbsp;<br />
to prevent papers which drift around too much, tell a story instead
of &nbsp;<br />
reporting on experiments, or carry on for too long.<br />
&nbsp;&nbsp; &nbsp;That said,
it is worth spending some time discussing the nature of
&nbsp;<br />
the data qualitatively and quantitatively (i.e. beyond what is in
the &nbsp;<br />
spec) - e.g. talking about the distribution of positives and
negatives &nbsp;<br />
and the nature of satire w.r.t how it might be useful in feature
&nbsp;<br />
selection. Most people did this to some extent.<br />
&nbsp;&nbsp; &nbsp;Quite often
there was too much focus on details of implementation
&nbsp;<br />
that are not relevant for papers such as this. A quick reference to
&nbsp;<br />
the language of choice, as well as the names of third party
toolkits &nbsp;<br />
that you make use of, should be plenty. However _sparing_ use of
&nbsp;<br />
generic system architecture diagrams can be valuable if the system
is &nbsp;<br />
sufficiently convoluted that they provide extra information (as
long &nbsp;<br />
as they're clear). Similarly for pseudo-code.<br />
&nbsp;&nbsp; &nbsp;A few people
didn't use f-scores enough. You should be using these
&nbsp;<br />
(specifically over the satire class), not accuracy. This was
mentioned &nbsp;<br />
in the lectures. In a needle-in-a-haystack exercise such as this,
&nbsp;<br />
accuracy should be mentioned in passing at most.<br />
&nbsp;&nbsp; &nbsp;Sometimes
features were introduced without motivation - a classic
&nbsp;<br />
example being part of speech tag features. I can't off the top of
my head see why &nbsp;<br />
these would be useful, but it seems that in some cases they were.
Some &nbsp;<br />
prior motivation and/or analysis after getting the results would be
&nbsp;<br />
interesting in the case of most features apart from very standard
bag &nbsp;<br />
of words style features.<br />
&nbsp;&nbsp; &nbsp;In fact the
same goes for any surprising effects relating to features
&nbsp;<br />
or choice of classifier. A lot of the time the analysis of these
cases &nbsp;<br />
could have been more extensive.<br />
&nbsp;&nbsp; &nbsp;Similarly
motivation for selection of classifier(s) was occasionally
&nbsp;<br />
omitted. Even if the motivation is not strong, it should be
mentioned, &nbsp;<br />
or it seems as if you're just throwing any weka algorithm at the
task &nbsp;<br />
without regard for its appropriateness (which isn't what you're
doing, &nbsp;<br />
right?).<br />
<br />
<br />
Tim]]></description>
            <author>featheast</author>
            <category>茫然IT</category>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100b963.html#comment</comments>
            <pubDate>Tue, 18 Nov 2008 23:08:51 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100b963.html</guid>
        </item>
        <item>
            <title>ibatis学习记录(4)</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100b3ff.html</link>
            <description><![CDATA[<p>今天主要的研究是关于ibatis的DAO。DAO全名是Data Access
Object，有它的存在解决了数据库使用中的一个问题，就是如何面对不同的数据库资源进行相同的处理。在DAO下，规定了数据库操作的接口，于是面对不同的数据库资源，只需要分别实现相关接口就可以。提供接口API给用户能是用户更加方便的操作数据库，减少麻烦，避免一些可以避免的错误。</P>
<p>
在使用之前，必须下载ibatis的dao包，因为在直接下载的ibatis包中是不含dao部分的。下载页面的右下角就有下载。</P>
<p>首先，来看一下ibatis的DAO结构，其核心就在一个dao.xml配置文件中。<br />
&lt;daoConfig&gt;<br />
&nbsp;&lt;context
id="sqlmap"&gt;<br />
&nbsp;&nbsp;&lt;transactionManager
type="SQLMAP"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;property
name="SqlMapConfigResource"
value="com/featheast/daobasic/SqlMapConfig.xml"/&gt;<br />

&nbsp;&nbsp;&lt;/transactionManager&gt;<br />

&nbsp;&nbsp;&lt;dao
interface="com.featheast.daobasic.UserDao"<br />
&nbsp;&nbsp;&nbsp;implementation="com.featheast.daobasic.UserDaoImpl"/&gt;<br />

&nbsp;&lt;/context&gt;<br />
&lt;/daoConfig&gt;<br />
在这个配置文件中，定义了当前的上下文环境，使用的TransactionManager，这个可以直接使用前面已经用过的manager，以及相对应的一组dao接口和实现类。很直观简洁。所有的DAO都是围绕着这个配置文件展开的。</P>
<p>接口定义了需要操作的方法，如下所示，基本包含了常见的CRUD方法：<br />
public interface UserDao {<br />
&nbsp;public void insert(UserBean user);<br />
&nbsp;public void update(UserBean user);<br />
&nbsp;public int delete(UserBean user);<br />
&nbsp;public int delete(Integer id);<br />
&nbsp;public
List&lt;UserBean&gt; getUserList(UserBean
user);<br />
&nbsp;public
List&lt;Map&lt;String,
Object&gt;&gt; getMapList(UserBean
user);<br />
&nbsp;public UserBean getById(Integer id);<br />
&nbsp;public UserBean getUser(UserBean user);<br />
}</P>
<p>然后仍然是按照前面的定义SqlMapConfig.xml 和
SqlMap.xml，分别管理transactionManager和sql映射。</P>
<p>最后就是完成实现接口类：<br />
public class UserDaoImpl extends SqlMapDaoTemplate implements
UserDao {<br />
&nbsp;public UserDaoImpl(DaoManager daoManager){<br />
&nbsp;&nbsp;super(daoManager);<br />
&nbsp;}&nbsp;<br />
&nbsp;public int delete(UserBean user) {<br />
&nbsp;&nbsp;// TODO Auto-generated method
stub<br />
&nbsp;&nbsp;return
delete(user.getId());<br />
&nbsp;}<br />
&nbsp;public int delete(Integer id) {<br />
&nbsp;&nbsp;// TODO Auto-generated method
stub<br />
&nbsp;&nbsp;return
delete("UserBean.delete",id);<br />
&nbsp;}<br />
&nbsp;public UserBean getById(Integer id) {<br />
&nbsp;&nbsp;// TODO Auto-generated method
stub<br />
&nbsp;&nbsp;return
(UserBean)queryForObject("UserBean.getById",id);<br />
&nbsp;}<br />
&nbsp;public
List&lt;Map&lt;String,
Object&gt;&gt; getMapList(UserBean user)
{<br />
&nbsp;&nbsp;// TODO Auto-generated method
stub<br />
&nbsp;&nbsp;return
queryForList("UserBean.getMapList",user);<br />
&nbsp;}<br />
&nbsp;public UserBean getUser(UserBean user) {<br />
&nbsp;&nbsp;// TODO Auto-generated method
stub<br />
&nbsp;&nbsp;return null;<br />
&nbsp;}<br />
&nbsp;public
List&lt;UserBean&gt; getUserList(UserBean
user) {<br />
&nbsp;&nbsp;// TODO Auto-generated method
stub<br />
&nbsp;&nbsp;return
queryForList("UserBean.getUserList",user);<br />
&nbsp;}<br />
&nbsp;public void insert(UserBean user) {<br />
&nbsp;&nbsp;// TODO Auto-generated method
stub<br />
&nbsp;&nbsp;insert("UserBean.insert",user);<br />

&nbsp;}<br />
&nbsp;public void update(UserBean user) {<br />
&nbsp;&nbsp;// TODO Auto-generated method
stub<br />
&nbsp;&nbsp;update("UserBean.update",user);<br />

&nbsp;}<br />
}<br />
首先要注意的是该类扩展了SqlMapDaoTemplate，这就可以直接在该类中调用常见的数据库操作方法而不需要生成一个SqlClient的实例。</P>
<p>最后是测试类：<br />
public static void main(String[] args) {<br />
&nbsp;&nbsp;// TODO Auto-generated method
stub<br />
&nbsp;&nbsp;DaoManager
manager=GetDaoManager.getDaoManager();<br />
&nbsp;&nbsp;//UserDaoImpl impl=new
UserDaoImpl(manager);<br />
&nbsp;&nbsp;UserDao
impl=(UserDao)manager.getDao(UserDao.class);<br />
&nbsp;&nbsp;System.out.println(impl.delete(108));<br />

&nbsp;&nbsp;//System.out.println(impl.getById(108));<br />

&nbsp;&nbsp;UserBean user=new
UserBean();<br />
&nbsp;&nbsp;user.setDay("7");<br />
&nbsp;&nbsp;user.setEmail("<a HREF="mailto:123@123.com">123@123.com</A>");<br />
&nbsp;&nbsp;user.setMonth("1");<br />
&nbsp;&nbsp;user.setName("fea");<br />
&nbsp;&nbsp;user.setPwd("123");<br />
&nbsp;&nbsp;user.setQq("222");<br />
&nbsp;&nbsp;user.setUid("fea");<br />
&nbsp;&nbsp;user.setYear("1000");<br />
&nbsp;&nbsp;impl.insert(user);<br />
&nbsp;}<br />
其中有很重要的一点要注意的，就是在初始化impl的时候，不能直接使用构造函数，不然就会在后面出现NEP报错，地点应该是在getTransaction()方法中，第108行。这个问题花了我半个小时，最后才在Goolge上找到一个人出了同样的问题，用UserDao
impl=(UserDao)manager.getDao(UserDao.class);这个方法解决的。</P>]]></description>
            <author>featheast</author>
            <category>茫然IT</category>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100b3ff.html#comment</comments>
            <pubDate>Sun, 02 Nov 2008 10:31:36 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100b3ff.html</guid>
        </item>
        <item>
            <title>ibatis学习记录（3）</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100b343.html</link>
            <description><![CDATA[在ibatis中，会发现其输入参数只能有一个，于是当出现需要进行多个输入参数的时候，就要想点办法了，我看到的有以下两种比较好的方法能够解决这个问题<br />

1） 用String代替<br />
&lt;select id="checkLogin"
parameterClass="java.lang.String"
resultClass="java.lang.Integer"&gt;<br />
&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;
&nbsp;SELECT count(*) AS value FROM userinfo WHERE
$sql$<br />
&lt;/select&gt;<br />
比如如上的map
statement代码中，将输入的参数设置为String类型，而在select语句中直接使用该String，于是用户可以在Java程序代码中手工植入需要匹配的参数。<br />

<br />
String sql = "uid = '" + username + "' and pwd='" + password +
"'";<br />
Integer r = (Integer) sqlMap.queryForObject("checkLogin",
sql);<br />
<br />
这个方法很简单，但是弊端也很多。首先得需要用户自己手动写sql语句代码在java中，这与ibatis的本质要将数据层的操作和业务逻辑操作分隔开来是违背的。其次，这个办法可能会被利用造成sql
injection的问题。比如在sql语句的最后加上一句;drop some
table。这样的结果显而易见，就是灾难性的。<br />
<br />
2）用 Map<br />
&lt;select id="checkLogin2"
parameterClass="java.util.Map"
resultClass="java.lang.Integer"&gt;<br />
&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;
&nbsp;SELECT count(*) AS value FROM userinfo WHERE
uid=#uid# and pwd=#pwd#<br />
&lt;/select&gt;<br />
<br />
这种办法显得要清楚的很多，也不需要自己手动编写sql到java之中。<br />
Map map=new HashMap();<br />
map.put("uid", username);<br />
map.put("pwd", password);<br />
Integer r = (Integer) sqlMap.queryForObject("checkLogin2",
map);<br />
<br />
在java中首先生成需要的map，然后作为输入参数传入即可。这个方法应该是比较好的，值得推荐。<br />
<br />
3）也有人采用根据需要编写javaBean的方法，但是这个方法的弊病在于如果你的逻辑操作涉及到很多的不同的属性的组合，你就会浪费很多资源去生成各种各样的bean。]]></description>
            <author>featheast</author>
            <category>茫然IT</category>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100b343.html#comment</comments>
            <pubDate>Sat, 01 Nov 2008 09:23:11 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100b343.html</guid>
        </item>
        <item>
            <title>ibatis学习记录（2）</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100b2z2.html</link>
            <description><![CDATA[<span STYLE="font-size: 10pt; font-family: 宋体;">今天主要对iBatis的各种SQL语句进行了一些测试，iBatis的query一共有三种形式，分别是queryForObject,
queryForList, queryForMap</SPAN> 

 
<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体;">queryForObject返回的是一个一个单独的实例，queryForList返回的是一组实例，而queryForMap返回一个映射表</SPAN></P>
<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体;">&nbsp;</SPAN></P>
<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体;">在使用这三个方法之前，首先需要在SqlMap文件中配置好相关的resultMap，这样才能将结果集顺利返回。也就是说，必须需要一个javaBean存在，然后是一个resultMap:</SPAN><br />
</P>
<div CLASS="highlighter">
<ol CLASS="highlighter-xml" START="1">
<li><span>#&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">resultMap</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">id</SPAN><span>=</SPAN><span CLASS="attribute-value">"UserBeanMap"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">class</SPAN><span>=</SPAN><span CLASS="attribute-value">"com.featheast.chap4.UserBean"</SPAN><span CLASS="tag">&gt;</SPAN></LI>
<li CLASS="alt">
<span>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">result</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">property</SPAN><span>=</SPAN><span CLASS="attribute-value">"id"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">column</SPAN><span>=</SPAN><span CLASS="attribute-value">"id"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li>
<span>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">result</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">property</SPAN><span>=</SPAN><span CLASS="attribute-value">"uid"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">column</SPAN><span>=</SPAN><span CLASS="attribute-value">"uid"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li CLASS="alt">
<span>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">result</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">property</SPAN><span>=</SPAN><span CLASS="attribute-value">"pwd"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">column</SPAN><span>=</SPAN><span CLASS="attribute-value">"pwd"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li>
<span>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">result</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">property</SPAN><span>=</SPAN><span CLASS="attribute-value">"email"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">column</SPAN><span>=</SPAN><span CLASS="attribute-value">"email"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li CLASS="alt">
<span>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">result</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">property</SPAN><span>=</SPAN><span CLASS="attribute-value">"name"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">column</SPAN><span>=</SPAN><span CLASS="attribute-value">"name"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li>
<span>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">result</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">property</SPAN><span>=</SPAN><span CLASS="attribute-value">"qq"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">column</SPAN><span>=</SPAN><span CLASS="attribute-value">"qq"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li CLASS="alt">
<span>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">result</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">property</SPAN><span>=</SPAN><span CLASS="attribute-value">"year"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">column</SPAN><span>=</SPAN><span CLASS="attribute-value">"year"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li>
<span>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">result</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">property</SPAN><span>=</SPAN><span CLASS="attribute-value">"month"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">column</SPAN><span>=</SPAN><span CLASS="attribute-value">"month"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li CLASS="alt">
<span>#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">result</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">property</SPAN><span>=</SPAN><span CLASS="attribute-value">"day"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">column</SPAN><span>=</SPAN><span CLASS="attribute-value">"day"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li><span>#&nbsp;</SPAN><span CLASS="tag">&lt;/</SPAN><span CLASS="tag-name">resultMap</SPAN><span CLASS="tag">&gt;</SPAN></LI>
</OL>
</DIV>



<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体;">比如如上是一个UserBean的resultMap，它包含了这个bean中的所有的属性，并且对应到了数据库表中的列。</SPAN></P>
<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体;">&nbsp;</SPAN></P>
<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体;">1).queryForObject:</SPAN></P>
<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体;">代码看上去是很简单的，下面是按照ID取出唯一的一个user元素</SPAN></P>



<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体;">如果你试图返回一个多行的值到Object中，程序就会报错</SPAN><span STYLE="font-size: 10pt; font-family: &quot;Courier New&quot;; color: red;">Error:
executeQueryForObject returned too many results</SPAN></P>
<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: &quot;Courier New&quot;; color: red;">
&nbsp;</SPAN></P>
<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体;">2).queryForList:</SPAN></P>
<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体;">在前面的一篇文章中已经采用了queryForList来作为实验。其实看看第一部分的代码，需要改的地方其实就是把函数名改为queryForList，然后取出各个List就好了。道理是一样的。</SPAN></P>
<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体;">&nbsp;</SPAN></P>
<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体;">3).queryForMap:</SPAN></P>
<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体;">唯一需要改变的地方就是要讲resultMap中的class改换为java.util.HashMap，其余的都可以按照正常的方法向下进行，的确非常易懂。</SPAN></P>
<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体;">&nbsp;</SPAN></P>
<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体;">2.insert:</SPAN></P>
<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体;">相比较select的复杂而言，insert就简单的多了，几乎和jdbc中一样，直接套用上去就可以了。下面给出一个例子：</SPAN></P>
<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<br /></P>
<div CLASS="highlighter">
<ol CLASS="highlighter-xml" START="1">
<li><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">insert</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">id</SPAN><span>=</SPAN><span CLASS="attribute-value">"insertUser"</SPAN><span CLASS="tag">&gt;</SPAN><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INSERT&nbsp;INTO&nbsp;userinfo(</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uid,pwd,email,name,qq,year,month,day</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)VALUES(</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#uid:VARCHAR#,#pwd:VARCHAR#,#email:VARCHAR#,#name:VARCHAR#,#qq:VARCHAR#,#year:VARCHAR#,#month:VARCHAR#,#day:VARCHAR#</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)</SPAN></LI>
<li><span CLASS="tag">&lt;/</SPAN><span CLASS="tag-name">insert</SPAN><span CLASS="tag">&gt;</SPAN></LI>
<li CLASS="alt"><br /></LI>
</OL>
</DIV>



<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体;">以上是sql的map结果，是不是和JDBC一样呢。然后在JAVA中的调用：</SPAN></P>
<br />
<div CLASS="highlighter">
<ol CLASS="highlighter-j" START="1">
<li><span>UserBean&nbsp;user=</SPAN><span CLASS="keyword">new</SPAN><span>&nbsp;UserBean();</SPAN></LI>
<li CLASS="alt"><span>user.setDay(</SPAN><span CLASS="string">"31111"</SPAN><span>);</SPAN></LI>
<li><span>user.setEmail(</SPAN><span CLASS="string">"featheast@123.com111"</SPAN><span>);</SPAN></LI>
<li CLASS="alt"><span>user.setMonth(</SPAN><span CLASS="string">"10111"</SPAN><span>);</SPAN></LI>
<li><span>user.setName(</SPAN><span CLASS="string">"featheast111"</SPAN><span>);</SPAN></LI>
<li CLASS="alt"><span>user.setPwd(</SPAN><span CLASS="string">"123456111"</SPAN><span>);</SPAN></LI>
<li><span>user.setQq(</SPAN><span CLASS="string">"30003000111"</SPAN><span>);</SPAN></LI>
<li CLASS="alt"><span>user.setUid(</SPAN><span CLASS="string">"featheast111"</SPAN><span>);</SPAN></LI>
<li><span>user.setYear(</SPAN><span CLASS="string">"2008111"</SPAN><span>);</SPAN></LI>
<li CLASS="alt"><span>sqlMap.insert(</SPAN><span CLASS="string">"insertUser"</SPAN><span>,user);</SPAN></LI>
<li><br /></LI>
</OL>
</DIV>
<br />
<div CLASS="blogstory">


<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体; color: black;">如果觉得每次都得在</SPAN><span STYLE="font-size: 10pt; font-family: 宋体; color: black;" LANG="EN-US" XML:LANG="EN-US">sql</SPAN><span STYLE="font-size: 10pt; font-family: 宋体; color: black;">的</SPAN><span STYLE="font-size: 10pt; font-family: 宋体; color: black;" LANG="EN-US" XML:LANG="EN-US">map</SPAN><span STYLE="font-size: 10pt; font-family: 宋体; color: black;">中写得太多而繁琐的话</SPAN><span STYLE="font-size: 10pt; font-family: 宋体; color: black;">，</SPAN><span STYLE="font-size: 10pt; font-family: 宋体; color: black;">可以用一个</SPAN><span STYLE="font-size: 10pt; font-family: 宋体; color: black;" LANG="EN-US" XML:LANG="EN-US">parametermap</SPAN><span STYLE="font-size: 10pt; font-family: 宋体; color: black;">来代替</SPAN><span STYLE="font-size: 10pt; font-family: 宋体; color: black;">：</SPAN></P>
<br />
<div CLASS="highlighter">
<ol CLASS="highlighter-xml" START="1">
<li><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">parameterMap</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">class</SPAN><span>=</SPAN><span CLASS="attribute-value">"com.featheast.chap4.UserBean"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">id</SPAN><span>=</SPAN><span CLASS="attribute-value">"insertUserMap"</SPAN><span CLASS="tag">&gt;</SPAN><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">parameter</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">property</SPAN><span>=</SPAN><span CLASS="attribute-value">"uid"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">jdbcType</SPAN><span>=</SPAN><span CLASS="attribute-value">"VARCHAR"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">parameter</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">property</SPAN><span>=</SPAN><span CLASS="attribute-value">"pwd"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">jdbcType</SPAN><span>=</SPAN><span CLASS="attribute-value">"VARCHAR"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">parameter</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">property</SPAN><span>=</SPAN><span CLASS="attribute-value">"email"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">jdbcType</SPAN><span>=</SPAN><span CLASS="attribute-value">"VARCHAR"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">parameter</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">property</SPAN><span>=</SPAN><span CLASS="attribute-value">"name"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">jdbcType</SPAN><span>=</SPAN><span CLASS="attribute-value">"VARCHAR"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">parameter</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">property</SPAN><span>=</SPAN><span CLASS="attribute-value">"qq"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">jdbcType</SPAN><span>=</SPAN><span CLASS="attribute-value">"VARCHAR"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">parameter</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">property</SPAN><span>=</SPAN><span CLASS="attribute-value">"year"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">jdbcType</SPAN><span>=</SPAN><span CLASS="attribute-value">"VARCHAR"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">parameter</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">property</SPAN><span>=</SPAN><span CLASS="attribute-value">"month"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">jdbcType</SPAN><span>=</SPAN><span CLASS="attribute-value">"VARCHAR"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">parameter</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">property</SPAN><span>=</SPAN><span CLASS="attribute-value">"day"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">jdbcType</SPAN><span>=</SPAN><span CLASS="attribute-value">"VARCHAR"</SPAN><span CLASS="tag">/&gt;</SPAN><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN></LI>
<li CLASS="alt"><span CLASS="tag">&lt;/</SPAN><span CLASS="tag-name">parameterMap</SPAN><span CLASS="tag">&gt;</SPAN></LI>
<li><br /></LI>
</OL>
</DIV>



<p CLASS="MsoNormal" STYLE="text-align: left;" ALIGN="left">
<span STYLE="font-size: 10pt; font-family: 宋体; color: black;">如果你的数据库中有自动增长列</SPAN><span STYLE="font-size: 10pt; font-family: 宋体; color: black;">，</SPAN><span STYLE="font-size: 10pt; font-family: 宋体; color: black;">那么就把那一列在添加的语句中空出来就可以了。系统会自动补上的。</SPAN></P>
</DIV>]]></description>
            <author>featheast</author>
            <category>茫然IT</category>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100b2z2.html#comment</comments>
            <pubDate>Fri, 31 Oct 2008 22:06:41 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100b2z2.html</guid>
        </item>
        <item>
            <title>ibatis学习记录（1）</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100b2n6.html</link>
            <description><![CDATA[这一两个星期是学期结束的时候，也是各个项目交的时候，于是大忙特忙之下，人的身体状况也不佳。而且为了machine
learning，还熬了在墨尔本的第一次夜。直到现在都还没怎么缓过来。还好，现在闲下来了，离考试时间还有三个星期，闲暇之余，去图书馆逛了逛，看到
了这本崭新的iBatis in
Action。很早就听说过这个持久层的框架，一般来说在你听说到Hibernate的时候，iBatis这个名字也会冒出来。一直都觉得
hibernate才是这一层里最有用的东西，就没有关心过太多iBatis，但这次看到了这本书，感觉上心动了一下，想想这几天也没什么事，书也不厚，
就借回来看看好了。于是就这样开始了我的iBatis的学习路程。<br />
<br />
目前看了前面的三章，用eclipse小试了一把，感觉这玩意的确很小
巧实在。使用很容易，不用像其他的大型框架配置半天，它就只有一个jar，大小才376K，里面就包括了所有的东西了。这点是最吸引我的地方，毕竟小嘛，
操作容易，上手也快。的确写起来很快，虽然我目前只做了一个很小的select的实验。对于真正的JAVA调用代码，其实就只有四行：<br />

<div CLASS="highlighter">
<ol CLASS="highlighter-j" START="1">
<li><span CLASS="keyword">&nbsp;&nbsp;&nbsp;&nbsp;try</SPAN><span>{</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;resource=</SPAN><span CLASS="string">"com/featheast/chap2/SqlMapConfig.xml"</SPAN><span>;</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reader&nbsp;reader=Resources.getResourceAsReader(resource);</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SqlMapClient&nbsp;sqlMap=SqlMapClientBuilder.buildSqlMapClient(reader);</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list=sqlMap.queryForList(</SPAN><span CLASS="string">"getAllUsers"</SPAN><span>,</SPAN><span CLASS="string">"1"</SPAN><span>);</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</SPAN><span CLASS="string">"Selected&nbsp;"</SPAN><span>+list.size()+</SPAN><span CLASS="string">"&nbsp;records."</SPAN><span>);</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="keyword">for</SPAN><span>(</SPAN><span CLASS="keyword">int</SPAN><span>&nbsp;i=</SPAN><span CLASS="number">0</SPAN><span>;i&lt;list.size();i++){</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(list.get(i));</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN><span CLASS="keyword">catch</SPAN><span>(Exception&nbsp;e){</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></LI>
<li CLASS="alt"><br /></LI>
</OL>
</DIV>
第一行是申明了你的sqlMapConfiguration文件的位置，第二行是读入这个配置文件，第三行是用这个文件生成sqlMap，最后一行就是调用其中的各种方法了。这样看来如果把配置文件给写好了的话，前面的JAVA简直就是太小儿科了。<br />

<br />
回头来看看它的配置文件。分为两种，一种就是上面提到的sqlMapConfiguration，这是整个程序的全局配置地点。包括了你的数据库的驱动，地址，用户名，密码等等这些常用的connection参数：<br />

<div CLASS="highlighter">
<ol CLASS="highlighter-xml" START="1">
<li><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">sqlMapConfig</SPAN><span CLASS="tag">&gt;</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">properties</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">resource</SPAN><span>=</SPAN><span CLASS="attribute-value">"com/featheast/chap2/db.properties"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">transactionManager</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">type</SPAN><span>=</SPAN><span CLASS="attribute-value">"JDBC"</SPAN><span CLASS="tag">&gt;</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">dataSource</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">type</SPAN><span>=</SPAN><span CLASS="attribute-value">"SIMPLE"</SPAN><span CLASS="tag">&gt;</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">property</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">name</SPAN><span>=</SPAN><span CLASS="attribute-value">"JDBC.Driver"</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="attribute">value</SPAN><span>=</SPAN><span CLASS="attribute-value">"${driver}"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">property</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">name</SPAN><span>=</SPAN><span CLASS="attribute-value">"JDBC.ConnectionURL"</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="attribute">value</SPAN><span>=</SPAN><span CLASS="attribute-value">"${url}"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">property</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">name</SPAN><span>=</SPAN><span CLASS="attribute-value">"JDBC.Username"</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="attribute">value</SPAN><span>=</SPAN><span CLASS="attribute-value">"${user}"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">property</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">name</SPAN><span>=</SPAN><span CLASS="attribute-value">"JDBC.Password"</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="attribute">value</SPAN><span>=</SPAN><span CLASS="attribute-value">"${password}"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;/</SPAN><span CLASS="tag-name">dataSource</SPAN><span CLASS="tag">&gt;</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;/</SPAN><span CLASS="tag-name">transactionManager</SPAN><span CLASS="tag">&gt;</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">sqlMap</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">resource</SPAN><span>=</SPAN><span CLASS="attribute-value">"com/featheast/chap2/SqlMap.xml"</SPAN><span CLASS="tag">/&gt;</SPAN></LI>
<li CLASS="alt"><span CLASS="tag">&lt;/</SPAN><span CLASS="tag-name">sqlMapConfig</SPAN><span CLASS="tag">&gt;</SPAN></LI>
<li><br /></LI>
</OL>
</DIV>
上面这段代码就是一个简单的实例，其中的值是在properties文件中。可以看到非常直观易懂。如果你会JDBC，就没有什么好解释的了。如果你不懂，估计看了你也知道一二了。<br />

<br />
接下来的关键部分就是上面这段代码中的sqlMap，这就是iBatis的核心部分，讲数据库的sql语句如何MAP到OO上来。<br />
<div CLASS="highlighter">
<ol CLASS="highlighter-xml" START="1">
<li><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">sqlMap</SPAN><span CLASS="tag">&gt;</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;</SPAN><span CLASS="tag-name">select</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">id</SPAN><span>=</SPAN><span CLASS="attribute-value">"getAllUsers"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">parameterClass</SPAN><span>=</SPAN><span CLASS="attribute-value">"string"</SPAN><span>&nbsp;</SPAN><span CLASS="attribute">resultClass</SPAN><span>=</SPAN><span CLASS="attribute-value">"hashmap"</SPAN><span CLASS="tag">&gt;</SPAN></LI>
<li>
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;userinfo&nbsp;WHERE&nbsp;</SPAN><span CLASS="attribute">month</SPAN><span>&nbsp;=&nbsp;#monthId#</SPAN></LI>
<li CLASS="alt">
<span>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><span CLASS="tag">&lt;/</SPAN><span CLASS="tag-name">select</SPAN><span CLASS="tag">&gt;</SPAN></LI>
<li><span CLASS="tag">&lt;/</SPAN><span CLASS="tag-name">sqlMap</SPAN><span CLASS="tag">&gt;</SPAN></LI>
</OL>
</DIV>
看
了以后也觉得非常的容易，不就是一个select语句被包在一个select的标签里吗。iBatis将sql语句划分为了input和output两部
分，在上面这个语句中，你要输入的monthid就是input，得到的结果*就是output，返回的是一个hashmap。那么在java程序中就可
以直接调用这些hashmap了。其实更好的是能够写出对应的返回值的bean，这样操作起来更加规范一些。<br />
<br />
有一个小小的问题就是目前来
说，这些XML配置文件的代码都得自己手写，于是这也就造成了会写错的地方，特别是DOCTYPE部分，下午我自己写的时候，就是在这里抄错了一个标点符
号和多写了一个字母，结果BAIDU来GOOGLE去，都解决不了问题，最终还是发现了这点点的敲击键盘错误。要是以后eclipse能自动生成配置文件
格式并检验就好了。我个人觉得现在应该也有了这种插件吧，还是明天再研究研究。<br />
<br />
以上所列出的就是第一天学习的iBatis的一点点总结。
很基础，每一个模块都还有很多东西要深究，这也就是后面几章要讲的内容。就我个人看来，iBatis相当于就是一个半自动化的ORM工具，毕竟各种SQL
语句还是得自己写，但是他能够将其MAP到OO，也算是一种很基础的封装，的确比直接调用JDBC显得要模式清楚的多。所以对于JDBC很熟悉的人来说，
看这些东西真的是很容易的一件事。而且再次说的是，iBatis真的是小巧，和Hibernate比起来呵呵。不过自然hibernate有它的强大之
处，打算等假期结束了，再重新回头来看一次Hibernate，也许会有更多的收货。<br />
<br />
PS:iBatis还可以在.net上运行，现在是月底，网速没有了，明天到学校去下一个.net版本的跑跑C#看效果如何。]]></description>
            <author>featheast</author>
            <category>茫然IT</category>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100b2n6.html#comment</comments>
            <pubDate>Thu, 30 Oct 2008 22:22:03 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100b2n6.html</guid>
        </item>
        <item>
            <title>敢问路在何方</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100b0wn.html</link>
            <description><![CDATA[<p>
惊闻TX的工资已经涨到13W了，真的是比我出国前的世道好多了。看来在经济危机饱受冲击的西方堕落的同时，大中华地区的确表现的非常出色。只是我更加感受到压力了。</P>
<p>&nbsp;</P>
<p>毕竟这是一笔巨大的投资，还完全不知道结果如何，想象如果当时留在图像所，会是怎么样的结果？谁都说不清楚。</P>
<p>&nbsp;</P>
<p>只是唯一的想法是，不能再玩了。</P>]]></description>
            <author>featheast</author>
            <category>残酷就业</category>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100b0wn.html#comment</comments>
            <pubDate>Sat, 25 Oct 2008 08:13:29 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100b0wn.html</guid>
        </item>
        <item>
            <title>关于Android的一些体验</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100ayhr.html</link>
            <description><![CDATA[<p>
说实话，要不是第一次课坐在那个位置，可能现在都还不知道Android是什么东西。从最开始接触的ShapeWriter，到做Presentation，直到最后在J2ME和Win
Mobile的徘徊之下选择了Android的平台来做这个项目，特别是最近的这整整一个星期的努力，算是对Android平台有了一个初步的了解。不过实话实话，真正做这个项目也就这一个星期，项目的确是相当之小，不然一个星期。。。。。。</P>
<p>
Google出的产品的确有其强大之处，巧妙的运用xml来布置界面，以及用专门的两个类来存储静态参数和各种ID,是一个不错的创新。不过对于刚刚入门的人来说，这又是一个及其痛苦的过程，大多数人会因为不习惯而觉得疑惑。这也是为什么尽管Android是运用的Java，但我就光熟悉它就花了这么久的时间。</P>
<p>
更多的问题是出在开发的过程之中，首先是数据库的问题。对于这种轻量级的数据库，在Android上有自带的Sqllite可以选择，一开始我也的确想用它，但是发现相当不好用，而且里面的数据不透明，查看也不方便。后来改为使用db4o，另外一个小型数据库，的确是相当好，就个人而言是非常喜欢这个数据库的。而且他是直接把关系型数据库转换为了OO数据库，编程就相当方便了。</P>
<p>
另外一个问题就是传输问题，我们选择了使用Xml-Rpc来传输数据，应该说是个很普通的选择，但就是这么一个简单的问题，就耗费了好多时间。很多平时在普通程序下很容易调的问题，在Android下，都成了问题。特别是其对相关第三方插件的检查比较严格，会经常报错。</P>
<p>
移动开发的确很普通开发区别很大，最大的一个麻烦是每次调试都得等待Emulator重启，这就是一个长时间的过程。程序员一般来说又是不耐烦不愿意等的。其次，就是debug的时候，只能看到e的内容，看不到他的stack，也就是说看不到命令行的显示，即使想用system来out也看不到。当然我觉得这个应该是我的问题，估计是没找对地方。</P>
<p>
这也暴露出了另一个问题，Android目前的资料太少了。就中文来说，几乎没有很好的资料，有的也都是从英文翻译过来的。而且很多资料都还是0.5版本的，因为那个版本的SDK是最长时间存在的。而最新出产的正式版到目前还没有一个月，资料多少可想而知。在英文论坛上资料相对而言多一点，但是也是参差不齐，没有很系统的介绍问题的。所以大多数问题都得自己去研究。而Android虽然号称是Open-Source，但是真正OPEN的只有它的Emulator，一堆一堆的C。在其中用JAVA实现的小程序是没有OPEN的，于是当我想借鉴一下，写Alarm
Clock也成了妄想。如果在星期一之前没有人在论坛和Google Group里回答问题的话，我想也只有放弃了。<br /></P>
<p>
当然，这个玩意的前景我觉得应该是不错的，至少看到现在G1的形势应该是相当好的。不过要打破其他大厂家，还得继续努力啊。人拉进来了，做的怎么样就得看本事了。值得赞赏的是界面的确好看些，比WIN
MOBILE呵呵。。。</P>]]></description>
            <author>featheast</author>
            <category>茫然IT</category>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100ayhr.html#comment</comments>
            <pubDate>Fri, 17 Oct 2008 11:03:17 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100ayhr.html</guid>
        </item>
        <item>
            <title>十月</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100awc5.html</link>
            <description><![CDATA[十月是生日的季节，首先我出生了，然后是我妈的生日，接着又是我家宝宝的生日，很好都集中在一起了。我第一个过完，无创意，无娱乐，睡觉就是最好的节日。感谢在生日的时候我祝福的所有人，呵呵，校内这方面还是很强大的，social
network。熟悉的，不熟悉的，一下在校内就都被牵起来了。正式踏入25的这条线了，虽然其实只过了24年。总觉得25这个岁数很特殊，很特别，不知道为什么。<br />

<br />
按道理来说今年是我的本命年，可是今年却是十足的灾年。在国内发生的一切就不说了，现在很好，华尔街一闹腾，全球都乱套。今天看到报纸上说，冰岛已经成为第一个最严重受伤的国家，整个国家的交易市场全部关闭。下一个是谁呢？还有在孟加拉国，终于已经有开始因为全球变暖而淹没的大城市了，这就是以后上海，纽约，甚至墨尔本这些靠海城市的命运么？还有两个月。年初的时候我就说，今年的灾年是因为我造成了，一定要我过完生日才行，不过呢。。。Britt的尸体也找到并被证实确实是它了，一架飞机又迫降在了WA,还有据说进口蔬菜也有了问题。世界末日？前奏？<br />

<br />
不过，十月的墨尔本的确是舒适而温馨的季节，阳光温暖，只是每逢好时节的时候，都是无法享受的时候，十月又是黑色的十月，要与无穷的作业伴随而过。好想有一天，没有作业了，天气又很好，一个人再坐火车到Dadenong去爬山啊。<br />

<br />]]></description>
            <author>featheast</author>
            <category>生活百态</category>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100awc5.html#comment</comments>
            <pubDate>Sat, 11 Oct 2008 07:25:04 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100awc5.html</guid>
        </item>
        <item>
            <title>假期结束</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100at7q.html</link>
            <description><![CDATA[<p>两个星期假期基本结束，小小回忆一把：</P>
<p>&nbsp;</P>
<p>关于吃：</P>
<p>
已经完全无法忍受青椒肉丝、土豆、加番茄炒鸡蛋的传统菜式了，终于在这学期开始了新的转变。但发现转变越快，淘汰越快。原来还是泡馆子最好啊，可是谁给我钱呢？</P>
<p>Doncaster
East的大班的确是个好地方，上周六和教会的朋友一起去吃，传统的广东点心，虽然很多和我在ChinaBar做的是一样，但味道相当不错。也难怪这么一帮人大老远跑到这里来吃。就是价格小有些昂贵，算是开荤吧。最喜欢吃虾饺，还是虾饺，恩。PS:凤爪没有我做的好吃。哈哈。福哥的手艺啊！</P>
<p>
Elizabath上的玫瑰园。在星际的多次推荐和自己的多次观察却因长队而无法入内，终于赶上了一次好日子。原来在墨尔本也有这么长的等着翻台的啊。点了最爱的烧腊，可是。。。唉后悔了，叉烧的味道真的是很很很一般，加上烧鸭太瘦，基本是皮包骨类型。应该不会再去了吧。可怜了小任，吃了一碗酱油咸面。</P>
<p>Doncaster的Little
Indian，是打完球去吃的，本来在太阳的暴晒下就没有多少胃口的。但是一看到那丰盛的菜，胃口就来了。3个荤菜10块9，不算太贵，当然你也可以只要一荤一素才8块多。。。味道相当不错，只是饭稍微差了点，虽然抹上了黄色的酱。</P>
<p>Bourke
St.上的新加坡餐厅，在和星际加Mark去了一个星期后，又和Todd去了一次，仍然点的是我最喜欢的叉烧加海南鸡。那里的叉烧绝对是我吃了这么多烧腊里面最好吃的，赞！价格实惠，饭也不错，酱也好吃。还有icy
water &amp; hot tea。可惜不要尝试对那些看上去像我们的人说中文，会碰壁。</P>
<p>我觉得我还是比较喜欢吃中餐，不过下次真的想去尝下越南餐。有机会再说吧。</P>
<p>&nbsp;</P>
<p>关于玩：</P>
<p>Melbourne Show：其实两个假期，真正算是出去玩的也就一天，去了Melbourne
Show，其实也就是中国的嘉年华外加动物世界。那些玩的的确吸引不了我太多，首先价格上就把我抵制了，其次就是这些玩意在中国基本都玩过。幸福的澳洲小孩啊，他们最大的幸福就是不用排队，想当年我们玩的时候，队伍那个长啊。在香港坐跳楼机等一个小时玩5分钟的经历还历历在目。</P>
<p>
不过动物的确还是不错，小猪跳水，那个猪的确是相当可爱。还有肥肥屁股的羊，竟然可以被抱起来。可惜看到里面都是小孩，实在不好意思钻进去了。还有一间大厅全是狗，各种各样的狗。就是有点臭，但是相当符合澳大利亚这个大型农业国家。</P>
<p>
只是回来的路上遭殃了点，走错了出口，于是一直走到了Fleminton马场，然后又再次和保安说好话把我们放进了showgrounds，也就是说我们围着整个场地走了一个废圈，要知道那天的温度。。。</P>
<p>&nbsp;</P>
<p>关于打球：</P>
<p>这两个星期的打球是最疯狂的，从第一次气喘吁吁直到现在，觉得小腿和背还是酸疼的。在Albert
Park打的那次可是相当之爽，唯一不爽之处就是自己最后抽筋了，两个腿都抽筋。再下来就是无论抢篮板还是投篮都不敢怎么跳，终于在一次上篮进球之后倒下了。</P>
<p>
在学校也打了一次，碰到一帮下周要打比赛的人，于是正好凑个份打全场。那个累，那个热啊。那一帮人看上去就是配合娴熟，像我们这种乌合之众，只能靠自己打了。不过发现自己感觉在慢慢找回。</P>
<p>和小菠菜已经约好，假期回武汉继续打球。</P>
<p>&nbsp;</P>
<p>关于Visa:</P>
<p>
终于把所有的申请材料都准备好了，的确是个费心的过程。去年申请澳大利亚的时候，全部是交给中介办的，于是乎。。。这次不一样了，什么都得自己弄，原来真的是很麻烦很麻烦。</P>
<p>
顺便鄙视一把中国的邮政，从中国寄封信过来，如果是平信，据说要很长时间，1个月？但是如果是特快专递的话，5天左右可以到，但是价格竟然要170人民币。这不纯粹是宰人吗？我从墨尔本寄回武汉，1元2，1周到；从墨尔本寄到都柏林，1周到，1张DVD，4块多；从都柏林寄封信到墨尔本，90cent
euro，5天到。</P>
<p>大概这就是发达国家和发展中国家的区别吧。</P>
<p>祈祷我的签证一定顺利下到。</P>
<p>再PS：欧洲的青年旅社真的好便宜啊，8欧就一晚上。爽！</P>
<p>&nbsp;</P>
<p>关于教会：</P>
<p>第一次去参加了cross culture，进行了bible
study。和我印象中的教会完全不一样，很活跃，很阳光，很有趣。原来是这样学Bible的啊。正好在学出埃及记，脑袋里蹦出来的是一部香港电影。。。耶稣的法律真的很好用啊，很教诲人，当然也有些奇怪恶心的惩罚，比如用石头把人砸死，有点过了。认识了很多朋友，更多的是说了很多英语，难得啊。我想说英语！</P>
<p>&nbsp;</P>
<p>关于其他：</P>
<p>昨天淋雨一把，极度难受。为什么雨是跟着我的，我出门开始下，我回家开始停？</P>
<p>永远抵制中国足球直到武汉队重新回来为止！</P>
<p>周杰伦的歌又冒出来了，就是MV拍得有点怪怪的，旋律倒还不错。再看看后面的歌再说吧。</P>
<p>我的那次恶心的小组成绩出来了，勉强及格。Never happen next time!!!</P>
<p>
突然发现到上面没有说关于学习。。。原来我的假期这么堕落啊。原来的计划把四个project都搞定的，现在。。。。。。丢人了。我好希望我当时没有选Machine
Learning啊。</P>
<p>另外准备年底回国考雅思了。作文+口语，nobody can help me but myself.</P>
<p>&nbsp;</P>
<p>&nbsp;</P>
<p>&nbsp;</P>]]></description>
            <author>featheast</author>
            <category>生活百态</category>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100at7q.html#comment</comments>
            <pubDate>Fri, 03 Oct 2008 23:23:20 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100at7q.html</guid>
        </item>
        <item>
            <title>震怒！</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100aqqn.html</link>
            <description><![CDATA[<p>八场禁赛，联赛还胜十二轮，武汉队花了三百多万买了一个只能踢六场球的人。</P>
<p>&nbsp;</P>
<p>
目前倒数第二的局面，作为真正的武汉球迷来说，虽说很难接受，但也不是那么的奇怪。但是这次的处罚，真的让人很震怒。今天早上特地在优酷上看了那个球的回放，路姜的犯规是很明显的，而要说李玮峰完全不是故意的也不太说的过去，但至少动作很不明显，很不夸张是事实，而且两下的确都没有踩到，属于一个模棱两可的范畴之内。就算如果裁判把李玮峰红牌罚下，再追加两场，我想武汉队的球迷也不会有太多的话说。顶多只是李玮峰再次激动了一把。</P>
<p>&nbsp;</P>
<p>
但是现在不一样了，自从比赛赛后国安一撒野，说要退出，那些在皇城根下生活的足协们就慌了。国安可是中国职业化以来唯一的一个没有改变过旗号的球队，15年了的确不容易。但是这种皇权的秉性放到了球场上就是太让人看不过去了。竟然国安的人还说要上诉不服判罚，那路姜那下掐脖是白掐的啊？看看所有的论坛，不都说国安你爱退出就退出啊，怎么每次喊了又不退啊，你一喊足协们就妥协，这次是拿武汉垫背。武汉是小点，穷点，但是你这样可是拿全国球迷来做对啊。</P>
<p>&nbsp;</P>
<p>
我承认武汉队今年踢得不好，主要的原因和李玮峰无关，和朱广沪无关。从年初开始高吹古斯塔博等人起，就觉得一切都不正常。没有好的锋线，武汉队的技术流派中场就完全失去了效果，加上卖掉了王小诗和杨昆鹏，本来就岌岌可危的后防线就完全消失了。武汉队留下了一群小个字技术中场，郑斌，陆博飞，王文华，邓卓祥，姚翰林，张辛昕，周熠，还有一排年轻人。这样的阵容和谁打都的确有危险。前几个赛季，武汉队的成功是建立在锋线上吉奥森和维森特的威胁上。</P>
<p>&nbsp;</P>
<p>
还有12场球，倒数第二，明天打辽宁绝对的保级大战。上次主场被深圳打平失去了翻身的机会，相信这次武汉队一定能搞定。置之死地而后生。</P>
<p>&nbsp;</P>
<p>
另后补一点，朱广沪上任以后，给武汉队没有什么改观是真的，为什么这么说，朱广沪本人本来就是不太爱玩技术的人，一直是疯狗精神，每个人就抢铲之类的。而对于武汉这一帮子中场，这种方式简直就是糟蹋。如果你在05、06年，看过武汉的比赛，你就知道那时的配合是多么的精彩。不过时过境迁，现在的武汉队，唉。。。</P>]]></description>
            <author>featheast</author>
            <category>体育杂谈</category>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100aqqn.html#comment</comments>
            <pubDate>Wed, 01 Oct 2008 03:01:01 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100aqqn.html</guid>
        </item>
        <item>
            <title>Timetable for Semester 2 Exams</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100apwu.html</link>
            <description><![CDATA[<table BORDER="1">
<tbody>
<tr>
<th>Code</TH>
<th>Subject</TH>
<th ALIGN="middle">Exam Date &amp; Time</TH>
<th ALIGN="middle">Exam Venue</TH>
<th ALIGN="middle">Duration</TH>
<th ALIGN="middle">Reading</TH>
<th ALIGN="middle">Open Book</TH>
<th ALIGN="middle">Dept</TH>
<th ALIGN="middle">Paper</TH>
<th ALIGN="middle">Seat Number</TH>
</TR>
<tr>
<td>433-620</TD>
<td>Engineering for Internet Applications</TD>
<td>Wed 19 NOV <a HREF="https://app.portal.unimelb.edu.au/functions/exams/info/info.html#StartingTimes">
2:15 p.m.</A></TD>
<td ALIGN="middle"><a HREF="https://app.portal.unimelb.edu.au/functions/exams/info/info.html#REB">
REB Rathdowne</A></TD>
<td ALIGN="middle">2 hrs</TD>
<td ALIGN="middle">15 mins</TD>
<td ALIGN="middle">y</TD>
<td ALIGN="middle">&nbsp;</TD>
<td ALIGN="middle">&nbsp;</TD>
<td ALIGN="middle">&nbsp;</TD>
</TR>
<tr>
<td>433-652</TD>
<td>Distributed Systems</TD>
<td>Wed 26 NOV <a HREF="https://app.portal.unimelb.edu.au/functions/exams/info/info.html#StartingTimes">
9:30 a.m.</A></TD>
<td ALIGN="middle"><a HREF="https://app.portal.unimelb.edu.au/functions/exams/info/info.html#REB">
REB Rathdowne</A></TD>
<td ALIGN="middle">3 hrs</TD>
<td ALIGN="middle">15 mins</TD>
<td ALIGN="middle">&nbsp;</TD>
<td ALIGN="middle">&nbsp;</TD>
<td ALIGN="middle">&nbsp;</TD>
<td ALIGN="middle">&nbsp;</TD>
</TR>
<tr>
<td>433-653</TD>
<td>Mobile Computing Systems Programming</TD>
<td>Mon 24 NOV <a HREF="https://app.portal.unimelb.edu.au/functions/exams/info/info.html#StartingTimes">
9:30 a.m.</A></TD>
<td ALIGN="middle"><a HREF="https://app.portal.unimelb.edu.au/functions/exams/info/info.html#REB">
REB Nicholson</A></TD>
<td ALIGN="middle">3 hrs</TD>
<td ALIGN="middle">15 mins</TD>
<td ALIGN="middle">&nbsp;</TD>
<td ALIGN="middle">&nbsp;</TD>
<td ALIGN="middle">&nbsp;</TD>
<td ALIGN="middle">&nbsp;</TD>
</TR>
<tr>
<td>433-684</TD>
<td>Machine Learning</TD>
<td>Fri 28 NOV <a HREF="https://app.portal.unimelb.edu.au/functions/exams/info/info.html#StartingTimes">
9:30 a.m.</A></TD>
<td ALIGN="middle"><a HREF="https://app.portal.unimelb.edu.au/functions/exams/info/info.html#REB">
REB Nicholson</A></TD>
<td ALIGN="middle">3 hrs</TD>
<td ALIGN="middle">15 mins</TD>
<td ALIGN="middle">&nbsp;</TD>
<td ALIGN="middle">&nbsp;</TD>
<td ALIGN="middle">&nbsp;</TD>
<td ALIGN="middle">&nbsp;</TD>
</TR>
</TBODY>
</TABLE>]]></description>
            <author>featheast</author>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100apwu.html#comment</comments>
            <pubDate>Sun, 28 Sep 2008 22:21:02 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100apwu.html</guid>
        </item>
        <item>
            <title>FOOTY之武汉版</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100apm4.html</link>
            <description><![CDATA[<p>
<em>背景：昨天AFL终于结束了，对于这个只在澳大利亚甚至可以说只在维州才如此之红火的比赛，绝对是澳大利亚人的节日。最终Howthorn战胜了Geelong，在10万观众前时隔17年再次夺冠。超级好的春天，加上精彩的比赛以及学生的假期，构成了这个周末的主题。</EM></P>
<p>&nbsp;</P>
<p>引申到了如火如荼的武汉AFL。。。。。</P>
<p>&nbsp;</P>
<p>武汉市第188届Football
League于今年4月在武汉揭开了今年比赛的大幕，参加比赛的球队包括江岸队，江汉队，汉阳队，武昌队，硚口队，洪山队，以及襄樊队，黄石队，宜昌队，十堰队，荆州队，以及特邀的南昌队，长沙队和郑州队。经过五个月的艰苦预赛，队员们顶着火炉般的烈日打完了所有的预赛，最终实力强大的江岸队和江汉队挺入了最后的决赛。</P>
<p>&nbsp;</P>
<p>
决赛9月27日在著名的新华路体育场进行，当天武汉阳光明媚万里无云，吸引了来自全武汉市，乃至全湖北省以及周边的湖南江西河南浙江安徽四川等全国各地球迷前来关注。由于本场比赛影响之大，国家教委特地安排了两周的Mid-break方便学生球迷看球，从华工武大，到六中二中七一，在到周边各大院校无不欢庆。武汉还特地举办一年一度的Wuhan
Show欢庆这个举国的假日。国务院更是因为这场决赛推迟了神州七号的舱外行走活动，因为据说旅行员想看到决赛的现场直播。</P>
<p>&nbsp;</P>
<p>
当天新华路体育场涌入了据说有五万名观众，虽然这种极有历史的体育场的最大容量只有2万人。周围的中山公园的摩天轮上，协和医院的每一个窗户上，还有场边的每一颗树上，都挤满了人。中央电视台，上海东方电视台，中国体育频道CSDN，还有湖北电视台，武汉电视台，什么某某学校校电视台，还有楚天广播台，武汉人民广播频道，调频92.7千赫。总之都在转播这场盛典。</P>
<p>&nbsp;</P>
<p>
本场比赛的现场直播是由著名的资深评论员，宋世雄老师，加上著名的狂喊解说家，黄健翔同志，还有更加搞笑版的韩乔生老师，当然也有武汉的优质评论员夏明华老师共同为大家解说。比赛于下午2点30分准时开球，全城激动，万众瞩目。</P>
<p>&nbsp;</P>
<p>
经过2个小时的激战，江岸队最终以10分的优势战胜了江汉队，获得了今年的总冠军。新华路上空放起了焰火（谁告诉我新华路属于江汉区还是江岸区？）赛后，全国个大媒体纷纷围住江岸队的球员，体坛周报，足球，还有武汉晚报，长江日报，楚天都市报，楚天金报，武汉城报，。。。。。。。都挤满了混合区，采访各式各样的球员。江岸队的队长表示：我们希望用这场冠军来让全国人民忘记耻辱的中国足球，也用这场冠军来激励我们武汉队的球员明天战胜北京。</P>
<p>&nbsp;</P>
<p>
明年的比赛将会更加精彩，而江岸队也讲获得了代表中国参加世界WFL的总决赛，将由江岸队对今年的AFL的冠军HOWTHRON，我们试目以待。。。</P>]]></description>
            <author>featheast</author>
            <category>生活百态</category>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100apm4.html#comment</comments>
            <pubDate>Sun, 28 Sep 2008 00:45:10 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100apm4.html</guid>
        </item>
        <item>
            <title>假假期</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100ao70.html</link>
            <description><![CDATA[<p>
转眼间，16天的大假已经过去了4天了，天气也走了一个轮回，从周六的阳光明媚，到周日的风起云涌，到周一的风雨交加，到周二的雨过天晴，今天终于是无雨无风。收拾了屋子，准备继续奋战在ICT。这也就是为什么说是一个假的假期了。</P>
<p>&nbsp;</P>
<p>周六去的City
Bath游泳，最浅处1米2，最深处2米8，这种奇怪的格局让人有点，以至于转身时的感觉是如此之怪异。水的干净程度没有墨大好，不过好处在于没有人管，想怎么游怎么游，不像墨大周六上午的光头管理员。而且还有个巨大的发现，City
Bath里面有打壁球的地方，2个场地，我们去看的时候两个印度人正在打，技术不敢恭维。什么时候我也要去过把瘾啊。对了，补充一句，City
Bath的更衣室是完全public的，对自己隐私比较担心的同志们，考虑考虑吧。。。</P>
<p ALIGN="center"><a href="http://blog.photo.sina.com.cn/showpic.html#url=http://static2.photo.sina.com.cn/orignal/49b3dc9e45797d4368ba1" TARGET="_blank"><img SRC="http://static2.photo.sina.com.cn/bmiddle/49b3dc9e45797d4368ba1" /></A></P>
<p>&nbsp;</P>
<p ALIGN="center"><a href="http://blog.photo.sina.com.cn/showpic.html#url=http://static6.photo.sina.com.cn/orignal/49b3dc9e45797d567c1c5" TARGET="_blank"><img SRC="http://static6.photo.sina.com.cn/bmiddle/49b3dc9e45797d567c1c5" /></A></P>
<a href="http://blog.photo.sina.com.cn/showpic.html#url=http://static14.photo.sina.com.cn/orignal/49b3dc9e45797d62e1e0d" TARGET="_blank"></A>
<p>&nbsp;</P>
<p>&nbsp;</P>
<p>
周一把我长期以来憎恶的东航机票给退了，因为运气好的我赶上了Qantas打折，于是在没多花一分钱的状况下，换成了Qantas的飞机。至少不用忍受东航了，虽然我还没有坐过东航的国际航班。还是11月29号就回到上海了，至于回武汉的机票就只有重新购买了。不过选择还是颇多的。</P>
<p>&nbsp;</P>
<p>
最近又开始吃上了冰淇淋，上次是考试的时候每天复习没事就吃两口，现在是闲着无聊的时候又开始吃两口。果然冬天是个适合吃冰淇淋的季节，到了夏天，就把这玩意给忘记了。超市里什么都不打折，这日子是没法活下去了，离开了ChinaBar的日子，生活异常艰苦，貌似现在ChinaBar又在招人了。。</P>
<p>&nbsp;</P>
<p>
墨大的portal挺人性化的，也不知道为什么他们要做广告，有一天早上在notice里面看到说可以免费送小礼物，于是就赶紧填了一个申请，不到1个小时就有人回复，说我忘记写要什么东西了，我就又回了一封，两天后就收到这个小玩意了。两只笔，一叠纸，一个盒子。做广告做的不错，不过真的不明白他们为什么要做广告，不过也就无所谓罢了。还有一个问题就是当天我再去看这个notice的时候，它就已经被删除了。难道是申请的人太多？</P>
<p ALIGN="center"><a href="http://blog.photo.sina.com.cn/showpic.html#url=http://static14.photo.sina.com.cn/orignal/49b3dc9e45797d62e1e0d" TARGET="_blank"><img SRC="http://static14.photo.sina.com.cn/bmiddle/49b3dc9e45797d62e1e0d" /></A></P>
<p>&nbsp;</P>
<p>
想去的地方很多，最近又喜欢上了台北，当然不能是跟团的那种。看了Asha在台北的游记，觉得和大陆没有多大区别啊，那人讲话的口音，简直就是比北京人还北京胡同旮旯的。还有瓦努阿图，瑙鲁，斐济，每天在报纸上看到做广告，飞机票那个便宜啊，心动啊。可惜。。。等我赚了钱。。。赚了再说吧。</P>]]></description>
            <author>featheast</author>
            <category>生活百态</category>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100ao70.html#comment</comments>
            <pubDate>Tue, 23 Sep 2008 22:16:57 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100ao70.html</guid>
        </item>
        <item>
            <title>你觉得RMI过时了没有？</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100amd4.html</link>
            <description><![CDATA[<p>至少我是觉得这又是一个浪费时间的事情，不知道是我目光短浅还是如何，在我看来这玩意有点或者说很 有点out of
date了。不过没办法，谁叫咱还在学习要做project呢。于是GOOGLE来百度去，发现大部分的资料都属于5年前左右的老作品，资格的确是相当之老啊。</P>
<p>&nbsp;</P>
<p>小小的Tip：</P>
<p>
1）如果想要在Netbeasn环境下进行RMI的调试，有一个问题是如何启动rmiregistry，如果还需要每次都当命令行里面来启动的话，使用Netbeans的意义就不大了。</P>
<p>&nbsp;&nbsp;
方法：1)在你当前项目的File结构下，进入build.xml</P>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
2)添加以下代码</P>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;target name="startRMI"
depends="init"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;exec executable="rmiregistry"
dir="${build.classes.dir}"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;/exec&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;/target&gt;</P>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
3）在需要启动的时候，右键点击build.xml-&gt;Run
Target-&gt;Other
Targets-&gt;StartRMI,这样RMI就顺利启动了</P>
<p>
如果使用Netbeans调试的话，就不需要再去生成什么stub或者是skeleton了，直接run就可以了。对于Eclipse环境下是否支持如此操作不太清楚，不过我觉得应该会有类似的方法。</P>
<p>2）关于RMISecurityManager的问题</P>
<p>如果在网上搜索，会发现很多代码里都会出现System.setSecurityManager(new
RMISecurityManager());这样一句。按照网上的意思是说，这句话保证了安全。不过我始终没有琢磨出来是多大个意思。（不知是否有人指导一下）</P>
<p>而且关键问题是，如果你直接照抄代码，会发现这句话将会带来Access
Denied的报错。但是如果将这一句注释掉，错误就没有了。无论是客户端还是服务端都是如此。</P>
<p>
经过搜索研究，发现问题出在你必须自己实现一个policy.txt来满足于RMISecurityManager的调用。是不是这样解释我也不是非常的肯定，但是至少用这个方法是可以把这个问题给解决掉的。</P>
<p>在项目文件夹下建立一个policy.txt文件，里面的内容：grant{<br />
permission java.net.SocketPermission "*:1099-65535",
"connect,accept,resolve";<br />
};也许还可以有更多，自己google吧。</P>
<p>然后启动代码的时候要加上java -Djava.security.policy=policy.txt XXXXXX。</P>]]></description>
            <author>featheast</author>
            <category>茫然IT</category>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100amd4.html#comment</comments>
            <pubDate>Thu, 18 Sep 2008 23:30:48 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100amd4.html</guid>
        </item>
        <item>
            <title>失毫厘</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100alyk.html</link>
            <description><![CDATA[<p ALIGN="left">
早上起床多赖了一下，结果就是眼看着车从鼻子前划过。接下来的故事也就比较顺其自然了，在rmit把书借了，出来怎么都等不到TRAM,外加巨大的风吹得眼睛生怕又进东西。来了一辆TRAM的结果就是爆满，不甘心之下，一怒走到ICT。已经10点20了，很好，白白的把今天的黄金游泳时间给浪费了。只能在这里百无聊赖的上网，等待11点的演讲。</P>
<p>&nbsp;</P>
<p ALIGN="center">空荡的ICT的1楼</P>
<p ALIGN="center"><a href="http://blog.photo.sina.com.cn/showpic.html#url=http://static12.photo.sina.com.cn/orignal/49b3dc9e45720d4fab6bb" TARGET="_blank"><img SRC="http://static12.photo.sina.com.cn/bmiddle/49b3dc9e45720d4fab6bb" /></A></P>
<p ALIGN="left">&nbsp;</P>
<p ALIGN="left">&nbsp;</P>]]></description>
            <author>featheast</author>
            <category>生活百态</category>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100alyk.html#comment</comments>
            <pubDate>Thu, 18 Sep 2008 00:36:47 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100alyk.html</guid>
        </item>
        <item>
            <title>不要怪我种族歧视</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100al3k.html</link>
            <description><![CDATA[<p>从某种程度上说，和某些种族地域的人合作的确是一件很累的事情。</P>
<p>&nbsp;</P>
<p>
放下伤心事。来看看更伤心的事情。上个星期六，武汉队和曼联队同时遭遇到一样的效果，被反超输球，比分都是1比2.忽然发现，除了实力相差巨大之外，这两只球队在某种程度上有着十分相似的地方。那就是十足垃圾的后防线。</P>
<p>&nbsp;</P>
<p>
本赛季，武汉队花了超过一千万买进了崭新的后方组合，李鲲，李毅男，还把埃莫森又召回。这样的结果就是场场几乎失球，场场丢定位球。看看走了的王小诗，在广州队都打上队长了，杨昆鹏在青岛队也是绝对的主力。很好，现在又花了500万买进李玮峰，一条后防线就花了1500万。要是降级那才搞笑。</P>
<p>&nbsp;</P>
<p>
曼联其实也好不到哪去，自古以来，费迪南德和维迪奇的组合就是大高个或者说是傻大个组合，结果就是一来转身慢，二来动作速率慢。上赛季得到两个冠军，算是借助了C罗的运气，这赛季C罗闹起来，现在的曼联课不好受了。想想吧，还有的就是布朗，这种从10年前就开始踢乌龙球的人到现在继续乌龙，而奥谢呢，总觉得这个人至今没有多大长进，很好把有希望的皮克给卖掉，只能剩下加里打了。看看实况里曼联的最新整容吧，后防就两个替补，西尔维斯特和辛普森都卖了，就连我打到体力不行的时候，都只能把哈格里夫斯或者弗莱彻拉回到后防。实在痛苦。</P>
<p>&nbsp;</P>
<p>希望武汉不要降级，希望朱广沪有点用，希望李玮峰能让武汉少丢几个球。</P>
<p>希望曼联能够赢球，希望贝巴多起作用，希望鲁尼C罗还有吉格斯能多进几个，当然还有特维斯。</P>]]></description>
            <author>featheast</author>
            <category>生活百态</category>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100al3k.html#comment</comments>
            <pubDate>Mon, 15 Sep 2008 03:38:48 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100al3k.html</guid>
        </item>
        <item>
            <title>为校内同步更新做测试</title>
            <link>http://blog.sina.com.cn/s/blog_49b3dc9e0100akg7.html</link>
            <description><![CDATA[为校内同步更新做测试]]></description>
            <author>featheast</author>
            <comments>http://blog.sina.com.cn/s/blog_49b3dc9e0100akg7.html#comment</comments>
            <pubDate>Sat, 13 Sep 2008 11:03:09 GMT+8</pubDate>
            <guid>http://blog.sina.com.cn/s/blog_49b3dc9e0100akg7.html</guid>
        </item>
    </channel>
</rss>
