﻿<?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-ZHOULEI's Java Blog-随笔分类-iBatis</title><link>http://www.blogjava.net/ZhouLei/category/34343.html</link><description>Java EE 5, Webwork, Spring, iBatis, AJAX</description><language>zh-cn</language><lastBuildDate>Wed, 03 Sep 2008 15:35:28 GMT</lastBuildDate><pubDate>Wed, 03 Sep 2008 15:35:28 GMT</pubDate><ttl>60</ttl><item><title>关于 iBATIS 的几点补充</title><link>http://www.blogjava.net/ZhouLei/archive/2008/09/03/226795.html</link><dc:creator>zhoulei</dc:creator><author>zhoulei</author><pubDate>Wed, 03 Sep 2008 14:24:00 GMT</pubDate><guid>http://www.blogjava.net/ZhouLei/archive/2008/09/03/226795.html</guid><wfw:comment>http://www.blogjava.net/ZhouLei/comments/226795.html</wfw:comment><comments>http://www.blogjava.net/ZhouLei/archive/2008/09/03/226795.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ZhouLei/comments/commentRss/226795.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ZhouLei/services/trackbacks/226795.html</trackback:ping><description><![CDATA[<p>&nbsp;14.6. 在iBATIS 2.09以后SQLMap支持动态表名<br />
&nbsp;Sample :<br />
&nbsp;&lt;select id ="getRighe" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; remapResults ="true" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resultMap ="resultRighe" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parameterClass ="java.util.Map" &gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select * from <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $tablePrefix$_righe<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where IDUser = #IDUser#<br />
&nbsp;&lt;/ select &gt; <br />
&nbsp;<br />
java code :<br />
param.put("tablePrefix", "NAG");<br />
param.put("IDUser", IDUser);<br />
utente = (Riga)getSqlMapClientTemplate().queryForObject("getRighe", param);<br />
&nbsp;<br />
&nbsp;<br />
14.7. Parameter Map 和 Inline Parameter<br />
具有 parameterMap 的statement中用?表示变量的占位符;而 Inline Parameter则用#varName#. 当使用基本类型包装类代替Java Bean时，切记要使用#value#作为参数。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameterMap id=&#8221;insert-product-param&#8221; class=&#8221;com.domain.Product&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter property=&#8221;id&#8221; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jdbcType=&#8221;NUMERIC&#8221; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; javaType=&#8221;int&#8221; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nullValue=&#8221;-9999999&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter property=&#8221;description&#8221; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jdbcType=&#8221;VARCHAR&#8221; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nullValue=&#8221;NO_ENTRY&#8221;/&gt;<br />
&lt;/parameterMap&gt;<br />
&lt;statement id=&#8221;insertProduct&#8221; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parameterMap=&#8221;insert-product-param&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insert into PRODUCT (PRD_ID, PRD_DESCRIPTION) values (?,?);<br />
&lt;/statement&gt;<br />
&nbsp;<br />
&lt;statement id=&#8221;insertProduct&#8221; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parameterClass=&#8221;com.domain.Product&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insert into PRODUCT (PRD_ID, PRD_DESCRIPTION)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values (#id:NUMERIC:-999999#, #description:VARCHAR:NO_ENTRY#);<br />
&lt;/statement&gt;<br />
&nbsp;<br />
14.8. 复杂类型属性<br />
&nbsp;&nbsp;&nbsp; &lt;resultMap id=&#8221;get-product-result&#8221; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class=&#8221;com.ibatis.example.Product&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property=&#8221;id&#8221; column=&#8221;PRD_ID&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property=&#8221;description&#8221; column=&#8221;PRD_DESCRIPTION&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property=&#8221;category&#8221; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; column=&#8221;PRD_CAT_ID&#8221; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select=&#8221;getCategory&#8221;/&gt;<br />
&lt;/resultMap&gt;<br />
&lt;resultMap id=&#8221;get-category-result&#8221; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class=&#8221;com.ibatis.example.Category&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property=&#8221;id&#8221; column=&#8221;CAT_ID&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property=&#8221;description&#8221; column=&#8221;CAT_DESCRIPTION&#8221;/&gt;<br />
&lt;/resultMap&gt;<br />
&lt;statement id=&#8221;getProduct&#8221; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parameterClass=&#8221;int&#8221; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resultMap=&#8221;get-product-result&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select * from PRODUCT where PRD_ID = #value#<br />
&lt;/statement&gt;<br />
&lt;statement id=&#8221;getCategory&#8221; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parameterClass=&#8221;int&#8221; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resultMap=&#8221;get-category-result&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select * from CATEGORY where CAT_ID = #value#<br />
&lt;/statement&gt;<br />
上面的例子中，Product对象拥有一个类型为Category的category属性。因为category是复杂类型（用户定义的类型），JDBC不知道如何给它赋值。通过将category属性值和另一个mapped statement联系起来，为SQL Map引擎如何给它赋值提供了足够的信息。通过执行&#8220;getProduct&#8221;，&#8220;get-product-result&#8221;Result Map使用PRD_CAT_ID字段的值去调用&#8220;getCategory&#8221;。&#8220;get-category-result&#8221;Result Map将初始化一个Category对象并赋值给它。然后整个Category对象将赋值给Product的category属性。<br />
使用一个联合查询和嵌套的属性映射来代替两个查询statement。上面例子的解决方案是：<br />
&lt;resultMap id=&#8221;get-product-result&#8221; class=&#8221;com.ibatis.example.Product&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property=&#8221;id&#8221; column=&#8221;PRD_ID&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property=&#8221;description&#8221; column=&#8221;PRD_DESCRIPTION&#8221;/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property=&#8221;category.id&#8221; column=&#8221;CAT_ID&#8221; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property=&#8221;category.description&#8221; column=&#8221;CAT_DESCRIPTION&#8221; /&gt;<br />
&lt;/resultMap&gt;<br />
&lt;statement id=&#8221;getProduct&#8221; parameterClass=&#8221;int&#8221; resultMap=&#8221;get-product-result&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select *<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from PRODUCT, CATEGORY<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where PRD_CAT_ID=CAT_ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and PRD_ID = #value#<br />
&lt;/statement&gt;<br />
&nbsp;<br />
14.9. 配置Log4J<br />
&nbsp;# Global logging configuration<br />
log4j.rootLogger=ERROR, stdout<br />
&nbsp;<br />
# SqlMap logging configuration...<br />
log4j.logger.com.ibatis=DEBUG<br />
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG<br />
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG<br />
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG<br />
log4j.logger.java.sql.Connection=DEBUG<br />
#log4j.logger.java.sql.Statement=DEBUG<br />
#log4j.logger.java.sql.PreparedStatement=DEBUG<br />
#log4j.logger.java.sql.ResultSet=DEBUG<br />
&nbsp;<br />
# Console output...<br />
log4j.appender.stdout=org.apache.log4j.ConsoleAppender<br />
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n<br />
&nbsp;<br />
14.10. 动态SQL语句<br />
&nbsp;&nbsp; &lt;statement id="someName" resultMap="account-result" &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select * from ACCOUNT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dynamic prepend="where"&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;isGreaterThan prepend="and" property="id" compareValue="0"&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;&nbsp;&nbsp; ACC_ID = #id#<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;/isGreaterThan&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;isNotNull prepend=&#8221;and" property="lastName"&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;&nbsp;&nbsp; ACC_LAST_NAME = #lastName#<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;/isNotNull&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/dynamic&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order by ACC_LAST_NAME<br />
&lt;/statement&gt;<br />
对于以上蓝色的单词就是 动态Mapped Statement 元素关系运算符(她包括一元和二元的很多类型,具体参见 注14.1. 点的内容)</p>
<img src ="http://www.blogjava.net/ZhouLei/aggbug/226795.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ZhouLei/" target="_blank">zhoulei</a> 2008-09-03 22:24 <a href="http://www.blogjava.net/ZhouLei/archive/2008/09/03/226795.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>