﻿<?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/libin2722/category/27810.html</link><description>快乐学习，快乐工作</description><language>zh-cn</language><lastBuildDate>Wed, 12 Dec 2007 11:51:33 GMT</lastBuildDate><pubDate>Wed, 12 Dec 2007 11:51:33 GMT</pubDate><ttl>60</ttl><item><title>ibatis中文与like的问题 </title><link>http://www.blogjava.net/libin2722/archive/2007/12/12/167220.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 12 Dec 2007 06:14:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2007/12/12/167220.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/167220.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2007/12/12/167220.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/167220.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/167220.html</trackback:ping><description><![CDATA[<table width="100%">
    <tbody>
        <tr>
            <td>
            <p>ibatis 用得正爽，可突然遇上表中的列名是中文，傻眼了，根本不识别列名，全是乱码，怎么办？发现处理办法非常简单，就是把映射文件的编码改为 GB2312 就可以了：</p>
            </td>
        </tr>
    </tbody>
</table>
<div class="code_title">代码</div>
<span><span>&lt;?xml&nbsp;version=</span><span class="string">"1.0"</span><span>&nbsp;encoding=</span><span class="string">"GB2312"</span><span>?&gt;&nbsp;&nbsp;<br />
<br />
<p>like在不同的数据库好像用法都不一样 <br />
select * from table where colName like '%' || #value# || '%'不起作用。按照官方的解释，如果你想要的查询是：</p>
<p>select * from foo where value like 'x%' <br />
那么你在 xml 映射文件中可能会写：</p>
<p>select * from foo where value like #parm# <br />
但是经过 ibatis 转换以后会变成：</p>
<p>select * from foo where value like ? <br />
所以你就什么也查不到了。怎么解决呢？有两种方法，一是自己处理参数 "x%"，也就是自己先在程序里面对传入的参数包裹一下，就像这样：</p>
<p>String param = "%" + param + "%" <br />
然后再把 param 传给 ibatis，这方法确实有效，但会使你很容易搞不清楚什么时候在哪里加了 like 了。第二种方法就是写成：</p>
<p>select * from foo where value like #parm# || '%'（对我不起作用） <br />
要使它对大小写不敏感，还可以写成：</p>
<p>select * from foo where upper(value) like '%%' || upper(#parm#) || '%%'（没有实验过） <br />
总之，目前还没有比较满意的解决 like，大家有什么好办法吗？<br />
<br />
<br />
<br />
<br />
最终我使用这样的方法解决了<br />
</p>
<p>select * from foo where value like '%$parm$%' <br />
<br />
<br />
<br />
<br />
看我写的：<br />
&lt;!-- 按用户角色列表和相应的条件查询员工 --&gt;<br />
&nbsp;&lt;select id="getEmployeeByWhere"&nbsp; resultMap="EmployeeInfoResult"&gt;<br />
&nbsp;<br />
&nbsp;&nbsp;SELECT DISTINCT e.* FROM employeeinfo AS e,roleteam r,team<br />
&nbsp;&nbsp;t,department d,organization o where r.tid = t.tid and e.tid =<br />
&nbsp;&nbsp;t.tid and t.deptid = d.deptid and d.oid = o.oid<br />
&nbsp;&nbsp;&lt;dynamic prepend="and"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;iterate property="roles" prepend="and" conjunction="or" open="("<br />
&nbsp;&nbsp;&nbsp;&nbsp;close=")"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;roleId = #roles[]#<br />
&nbsp;&nbsp;&nbsp;&lt;/iterate&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;isNotEqual prepend="and" property="deptid"<br />
&nbsp;&nbsp;&nbsp;&nbsp;compareValue="0"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;d.deptid = #deptid#<br />
&nbsp;&nbsp;&nbsp;&lt;/isNotEqual&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;isNotEqual prepend="and" property="oid" compareValue="0"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;o.oid = #oid#<br />
&nbsp;&nbsp;&nbsp;&lt;/isNotEqual&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;isNotEqual prepend="and" property="tid" compareValue="0"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;t.tid = #tid#<br />
&nbsp;&nbsp;&nbsp;&lt;/isNotEqual&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;isNotNull prepend="and" property="cnname"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;e.cnname like '%$cnname$%' <br />
&nbsp;&nbsp;&nbsp;&lt;/isNotNull&gt;<br />
&nbsp;&nbsp;&lt;/dynamic&gt;<br />
&nbsp;&nbsp;order by e.id desc<br />
&nbsp;&lt;/select&gt;</p>
</span></span>
<img src ="http://www.blogjava.net/libin2722/aggbug/167220.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-12-12 14:14 <a href="http://www.blogjava.net/libin2722/archive/2007/12/12/167220.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>打印出Ibatis最终的SQL语句</title><link>http://www.blogjava.net/libin2722/archive/2007/12/04/165153.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Tue, 04 Dec 2007 05:42:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2007/12/04/165153.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/165153.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2007/12/04/165153.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/165153.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/165153.html</trackback:ping><description><![CDATA[<p>做项目时遇到这样的需求，希望能打印出最终数据库执行的SQL语句，一般遇到这些有一定通用性的问题，我都会到Appfuse中去找找例子，结果这次没有成功。<br />
它是有相关的配置，但是好像没有用，我也就没有深查下去，我想这种问题网上肯定有人遇到过，只要找到这个人就行了。经过换不同的关键字，我最后找到了如下的配置。<br />
<br />
log4j.appender.stdout=org.apache.log4j.ConsoleAppender<br />
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n</p>
<p><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,stdout<br />
</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/165153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2007-12-04 13:42 <a href="http://www.blogjava.net/libin2722/archive/2007/12/04/165153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>