﻿<?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-cuiyi's blog（崔毅 crazycy）-随笔分类-读书笔记 </title><link>http://www.blogjava.net/crazycy/category/8598.html</link><description>记录点滴 鉴往事之得失 以资于发展 </description><language>zh-cn</language><lastBuildDate>Fri, 14 Dec 2007 16:19:13 GMT</lastBuildDate><pubDate>Fri, 14 Dec 2007 16:19:13 GMT</pubDate><ttl>60</ttl><item><title>Spring带来的“循序方法”</title><link>http://www.blogjava.net/crazycy/archive/2006/06/05/50519.html</link><dc:creator>crazycy</dc:creator><author>crazycy</author><pubDate>Mon, 05 Jun 2006 08:03:00 GMT</pubDate><guid>http://www.blogjava.net/crazycy/archive/2006/06/05/50519.html</guid><wfw:comment>http://www.blogjava.net/crazycy/comments/50519.html</wfw:comment><comments>http://www.blogjava.net/crazycy/archive/2006/06/05/50519.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/crazycy/comments/commentRss/50519.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/crazycy/services/trackbacks/50519.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: 宋体;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US"><font style="background-color: rgb(255, 165, 0);">非常感谢你的阅读，如果你觉得好或者对你有帮助，请<strong>积极给一个留言反馈</strong>以示鼓励。</font>&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>选择一种架构、一种技术的依据是什么？</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">Rod Johnson</span> <span style="line-height: 150%; font-family: 宋体;">认为，应该是基于实践的依据、来自历史项目或亲自试验的经验，而不是任何形式的偶像崇拜或者门户之见。</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: 宋体;">如果说</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">Spring</span> <span style="line-height: 150%; font-family: 宋体;">发起了对</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">J2EE</span> <span style="line-height: 150%; font-family: 宋体;">常规应用的挑战，那其立足的基础就是实践，把大量实践中的经验累积成一种最佳实践，把这种最佳实践融合到</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">J2EE</span> <span style="line-height: 150%; font-family: 宋体;">应用的方方面面。</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: 宋体;">事实胜于雄辩，用具体的示例进行阐述：</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: 宋体;">在</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">JDBC</span> <span style="line-height: 150%; font-family: 宋体;">操作中，我们用到的无非是增、删、改、查</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">CRUD4</span> <span style="line-height: 150%; font-family: 宋体;">个功能，每个功能都覆盖了</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">1</span> <span style="line-height: 150%; font-family: 宋体;">建立连接</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">2 </span><span style="line-height: 150%; font-family: 宋体;">构造</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">PrepareStatement</span> <span style="line-height: 150%; font-family: 宋体;">对象</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">3</span> <span style="line-height: 150%; font-family: 宋体;">进行操作</span> <span style="line-height: 150%; font-family: 宋体;">如果有异常回滚</span> <span style="line-height: 150%; font-family: Arial;"><span lang="EN-US">4 </span></span><span style="line-height: 150%; font-family: 宋体;">关闭连接。</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: 宋体;">以查询为例：</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">Connection conn=null;<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">PrepareStatement stmt = null;<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">ResultSet rs = null;<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">List results = null;<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">try {<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">conn = getConnection();<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">conn.setAutoCommit(false);<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">stmt = conn.preparedStatement(sql);<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">rs = stmt.executeQuery();<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">results = new ArrayList();<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">while(rs.next()) {<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>Object vo = new Object();<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>vo.setXX(rs.getXType(fieldName1));<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>vo.setYY(rs.getYType(fieldName2));<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&#8230;&#8230;<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>results.add(vo);<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">}<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">} catch(Exception ex) {<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">conn.rollback();<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">} finally {<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">if (null != rs) rs.clse();<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">if (null != stmt) stmt.clse();<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">if (null != conn) conn.clse();<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">} <o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US"><o:p>&nbsp;</o:p> </span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: 宋体;">对于：</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">Object vo = new Object();<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US"><span>&nbsp;</span>vo.setXX(rs.getXType(fieldName1));<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US"><span>&nbsp;</span>vo.setYY(rs.getYType(fieldName2));<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">&#8230;&#8230;<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: 宋体;">我们实际开发中常常使用</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">rs2VO(Resultset rs)</span> <span style="line-height: 150%; font-family: 宋体;">私有函数来进行转化；</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: 宋体;">这个过程，</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">Spring</span> <span style="line-height: 150%; font-family: 宋体;">提供了</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">RowMapper</span> <span style="line-height: 150%; font-family: 宋体;">接口，其方法是</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">public Object mapRow</span> <span style="line-height: 150%; font-family: 宋体;">（</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">ResultSet rs, int index</span> <span style="line-height: 150%; font-family: 宋体;">）异曲同工。</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: 宋体;"><br />
</span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: 宋体;">对于</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">while(rs.next()) {<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>Object vo = new Object();<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>vo.setXX(rs.getXType(fieldName1));<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp; </span>vo.setYY(rs.getYType(fieldName2));<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&#8230;&#8230;<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>results.add(vo);<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">}<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: 宋体;">这个过程：</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">Spring</span> <span style="line-height: 150%; font-family: 宋体;">中用</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">new RowMapperResultReader(new RowMapper())</span> <span style="line-height: 150%; font-family: 宋体;">来取代；</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: 宋体;"><br />
</span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: 宋体;">外加其提供的避免大量重复代码的回调函数，因此整个过程最后只剩下：</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">jdbcTemplate.query(sql, params, new RowMapperResultReader(new RowMapper()))<o:p></o:p></span> </p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: 宋体;">一句话这么简单。</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US"><o:p>&nbsp;</o:p> </span></p>
<p class="MsoNormal" style="text-indent: 21pt; line-height: 150%;"><span style="line-height: 150%; font-family: 宋体;">窥一豹而知全斑（当然有全部读完），所以我觉得与其说</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">Spring</span> <span style="line-height: 150%; font-family: 宋体;">是挑战</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US">J2EE</span> <span style="line-height: 150%; font-family: 宋体;">应用的地位，不如说其是通过大量实践从而提出了更有效的方式,是一种最佳实践的体现.</span> <span style="line-height: 150%; font-family: Arial;" lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height: 150%;"><span style="line-height: 150%; font-family: Arial;" lang="EN-US">因此,Spring</span> <span style="line-height: 150%; font-family: 宋体;">的过程也是论述&#8220;循序方法&#8221;论述的过程。</span> </p>
<p class="MsoNormal" style="line-height: 150%;"><br />
<span style="line-height: 150%; font-family: Arial;" lang="EN-US"><o:p></o:p></span></p>
<span style="font-size: 10.5pt; font-family: 宋体;">读完：《精通</span> <span style="font-size: 10.5pt; font-family: Arial;" lang="EN-US">Spring</span> <span style="font-size: 10.5pt; font-family: 宋体;">》《</span> <span style="font-size: 10.5pt; font-family: Arial;" lang="EN-US">Spring In<span>&nbsp; </span>Action</span> <span style="font-size: 10.5pt; font-family: 宋体;">》《</span> <span style="font-size: 10.5pt; font-family: Arial;" lang="EN-US">J2EE without EJB</span> <span style="font-size: 10.5pt; font-family: 宋体;">》和大量网络文章有感。</span> <br />
<br />
<font style="background-color: rgb(255, 165, 0);" face="Verdana">Thanks very much to visit blog,&nbsp; <strong>welcome your feedback</strong>,&nbsp; your feedback is the Driver &amp;&amp; Power to me</font> <font face="Arial"></font>
<img src ="http://www.blogjava.net/crazycy/aggbug/50519.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/crazycy/" target="_blank">crazycy</a> 2006-06-05 16:03 <a href="http://www.blogjava.net/crazycy/archive/2006/06/05/50519.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我读过的书（不断补充...）</title><link>http://www.blogjava.net/crazycy/archive/2006/03/17/35872.html</link><dc:creator>crazycy</dc:creator><author>crazycy</author><pubDate>Fri, 17 Mar 2006 15:20:00 GMT</pubDate><guid>http://www.blogjava.net/crazycy/archive/2006/03/17/35872.html</guid><wfw:comment>http://www.blogjava.net/crazycy/comments/35872.html</wfw:comment><comments>http://www.blogjava.net/crazycy/archive/2006/03/17/35872.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/crazycy/comments/commentRss/35872.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/crazycy/services/trackbacks/35872.html</trackback:ping><description><![CDATA[
		<p>
				<font size="2">
						<font face="Verdana">
								<font color="#ff0000">2004年10月---2006年2月：</font>
						</font>
				</font>
		</p>
		<p>
				<font face="Verdana" size="2">用例分析技术 </font>
		</p>
		<p>
				<font face="Verdana" size="2">J2EE经典实例详解 </font>
		</p>
		<p>
				<font face="Verdana" size="2">Java Web服务高级编程 </font>
		</p>
		<p>
				<font face="Verdana" size="2">Java Web服务 </font>
		</p>
		<p>
				<font face="Verdana" size="2">UML参考手册 </font>
		</p>
		<p>
				<font face="Verdana" size="2">Java2编程指南 </font>
		</p>
		<p>
				<font face="Verdana" size="2">高质量JAVA程序设计 </font>
		</p>
		<p>
				<font face="Verdana" size="2">Effective Java </font>
		</p>
		<p>
				<font face="Verdana" size="2">精通Hibernate </font>
		</p>
		<p>
				<font face="Verdana" size="2">精通Hibernate :Java对象持久化技术详解 </font>
		</p>
		<p>
				<font face="Verdana" size="2">精通Struts:基于MVC的Java Web设计与开发 </font>
		</p>
		<p>
				<font face="Verdana" size="2">精通Spring </font>
		</p>
		<p>
				<font face="Verdana" size="2">实用J2EE设计模式编程指南 </font>
		</p>
		<p>
				<font face="Verdana" size="2">程序员全年杂志（2005） </font>
		</p>
		<p>
				<font face="Verdana" size="2">
				</font>
		</p>
		<p>
				<font color="#ff0000">
						<br />
						<br />
						<font face="Verdana" size="2">  2006年2月：<br /></font>
				</font>
				<font face="Verdana" size="2"> <br /></font>   <font face="Verdana" size="2">狼图腾</font></p>
		<p>
				<font face="Verdana" size="2">  狼行天下</font>
		</p>
		<p>
				<font color="#000000">
						<font face="Verdana" size="2">  水煮三国</font>
				</font>
		</p>
		<p>
				<font color="#000000">
						<font face="Verdana" size="2">  大道至简--软件工程实践者的思想<br /><br />  深入浅出Hibernate</font>
				</font>
		</p>
		<p>
				<font color="#000000">
						<font face="Verdana" size="2">  《程序员》1-7期</font>
				</font>
		</p>
		<p>
				<font color="#000000">
						<font face="Verdana" size="2">  谋道<br /><br /><br /></font>
				</font>
				<font color="#ff0000">
						<font face="Verdana" size="2">2006年3月-7月：</font>
				</font>
				<br />
		</p>
		<font color="#000000">
				<font face="Verdana" size="2">    Spring In Action<br /><br />    AJAX基础教程<br /><br />    AJAX实践（AJAX In Action）<br /><br /><br /><font color="#ff0000">2006年8月-：<br /><font color="#000000">    易中天品三国<br /><br />    JSF核心编程<br /><br />    GoF设计模式<br /><br /><br />    <br />    <br /></font>    <br /></font></font>
		</font>
<img src ="http://www.blogjava.net/crazycy/aggbug/35872.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/crazycy/" target="_blank">crazycy</a> 2006-03-17 23:20 <a href="http://www.blogjava.net/crazycy/archive/2006/03/17/35872.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>