﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava--随笔分类-ibatis</title><link>http://www.blogjava.net/leekiang/category/48076.html</link><description>MDA/MDD/TDD/DDD/DDDDDDD</description><language>zh-cn</language><lastBuildDate>Sat, 08 Oct 2011 10:08:04 GMT</lastBuildDate><pubDate>Sat, 08 Oct 2011 10:08:04 GMT</pubDate><ttl>60</ttl><item><title>ibatis原理与源码分析</title><link>http://www.blogjava.net/leekiang/archive/2011/03/17/346435.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Wed, 16 Mar 2011 16:44:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2011/03/17/346435.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/346435.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2011/03/17/346435.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/346435.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/346435.html</trackback:ping><description><![CDATA[  //SqlMapClientBuilder的buildSqlMapClient(Reader reader)方法<br />public static SqlMapClient buildSqlMapClient(Reader reader) {<br />    return new SqlMapConfigParser().parse(reader);<br />  }<br /><br />  //SqlMapConfigParser的parse(Reader reader)方法<br />  public SqlMapClient parse(Reader reader) {<br />    try {<br />      usingStreams = false;<br />      parser.parse(reader);//此处的parser是NodeletParser<br />      return state.getConfig().getClient();<br />    } catch (Exception e) {<br />      throw new RuntimeException("Error occurred.  Cause: " + e, e);<br />    }<br />  }<br /> 在new SqlMapConfigParser()时就预先对配置文件xml的各个节点上要执行哪些事件做了定义(就是一些回调方法)，放在NodeletParser对象的一个HashMap属性里，真正调用这些方法是在nodeletParser.parse(reader)里完成的。<br />执行上述操作后会把配置文件的详细属性存储到该SqlMapConfigParser对象的XmlParserState对象、XmlParserState对象持有的SqlMapConfiguration对象以及(SqlMapConfiguration持有的SqlMapClientImpl和SqlMapExecutorDelegate)。<br /><br />SqlMapExecutor接口定义了CRUD等方法，SqlMapTransactionManager接口定义了跟事务相关的方法，SqlMapClient接口和SqlMapSession接口都继承了SqlMapExecutor和SqlMapTransactionManager。只是SqlMapClient增加了opensession等方法，SqlMapSession接口只增加了一个方法close()。<br /><br />SqlMapSessionImpl对象和SqlMapClientImpl对象持有共同的委托对象SqlMapExecutorDelegate delegate.并且利用此委托对象实例化了一个sessionScope对象,然后对增删改查的调用均委托对象执行处理并传入这个跟线程绑定的sessionScope对象.<br /><br />可在SqlMapConfig.xml里设置settings属性，具体有哪些属性，分别表示什么含义还不清楚。这些属性在ibatis启动后估计都保存在SqlMapExecutorDelegate对象里。<br />&lt;settings<br />cacheModelsEnabled="false"<br />enhancementEnabled="false"<br />lazyLoadingEnabled="false"<br />/&gt;<br /><br />问题：<br />1，使用SqlMapClient的最佳实践，应该用单例，并发如何处理<br />2，事务。单个操作不需要手动控制，如果是多个操作，先startTransaction，执行多个操作后commitTransaction，最后还要endTransaction<br /><br />参考：<br />1，<a target="_blank" href="http://hi.baidu.com/tmdniqusi/blog/item/c8fb9935d5b4fda5d1a2d36d.html">ibatis源码简析</a><br />2，<a target="_blank" href="http://blog.csdn.net/palm_civet/archive/2010/11/07/5993613.aspx">实现ibatis的动态加载sqlmap配置文件</a><br />3，<a target="_blank" href="http://www.ibm.com/developerworks/cn/java/j-lo-ibatis-principle/index.html">深入分析 iBATIS 框架之系统架构与映射原理</a><br />4，<a target="_blank" href="http://blogold.chinaunix.net/u1/55983/showart_2042837.html">Spring集成ibatis问题</a><br /><img src ="http://www.blogjava.net/leekiang/aggbug/346435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2011-03-17 00:44 <a href="http://www.blogjava.net/leekiang/archive/2011/03/17/346435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ibatis</title><link>http://www.blogjava.net/leekiang/archive/2011/02/26/345260.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Sat, 26 Feb 2011 14:47:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2011/02/26/345260.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/345260.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2011/02/26/345260.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/345260.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/345260.html</trackback:ping><description><![CDATA[IBatis 怎样直接执行SQL语句：<br />&lt;sqlMap namespace="bbs_define"&gt;<br />    &lt;!– selectBySql –&gt;<br />    &lt;select id="selectBySql" resultClass="java.util.HashMap"<br />        remapResults="true"<br />        parameterClass="java.util.HashMap"&gt;<br />        &lt;isNotEmpty property="sql"&gt;$sql$&lt;/isNotEmpty&gt;<br />    &lt;/select&gt;   <br />    &lt;!– updateBySql –&gt;<br />    &lt;update id="updateBySql" parameterClass="java.util.HashMap"&gt;<br />        &lt;isNotEmpty property="sql"&gt;$sql$&lt;/isNotEmpty&gt;<br />    &lt;/update&gt;   <br />&lt;/sqlMap&gt;<br /><br />其中最重要的设置是“remapResults="true"”。remapResults设置成true，表示结果字段可以是不定的。也就是说，这次可返回“ID,NAME”两个字段，下次何返回“ID,NAME,TYPE_ID”三个字段，也可以返回“*”<br /><br />用ibatis实现数据切分：<br />http://code.google.com/p/shardbatis/<br />http://code.google.com/p/ibatis-sharding/<br />阿里开源的CobarClient(http://www.javaeye.com/topic/977224)<br /><br />参考：<br />1，Ibatis的动态SQL http://hz.seraph.blog.163.com/blog/static/981677452008111902458957/<br />2，使用ibatis的一点小技巧 http://qa.taobao.com/?p=7371<br />3，http://www.ibm.com/developerworks/cn/opensource/os-cn-ibatis/?ca=drs-tp4608<br />4，http://itnewsvendor.appspot.com/2303004-ibatis_%E6%95%B4%E7%90%86_batis.html<br />5，http://itnewsvendor.appspot.com/4633016-ibatis_2.x_%E6%97%A5%E5%BF%97.html<br />6，http://blog.sina.com.cn/s/blog_63f93f510100i16h.html<br />7，http://lijingyao8206.javaeye.com/blog/840204<br />8, http://qa.taobao.com/?p=7677<br />9，http://blog.csdn.net/sunyujia/archive/2008/07/13/2646030.aspx<br />10，iBATIS不适合使用的四种情况浅析 http://developer.51cto.com/art/200907/136897.htm<br />11，http://blog.sina.com.cn/s/blog_63f93f510100i16h.html<br />12，<a href="/stone2083/archive/2010/08/12/328602.html">IBatis下DAO单元测试另类思路</a><img src ="http://www.blogjava.net/leekiang/aggbug/345260.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2011-02-26 22:47 <a href="http://www.blogjava.net/leekiang/archive/2011/02/26/345260.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>