Terry.Li-彬

虚其心,可解天下之问;专其心,可治天下之学;静其心,可悟天下之理;恒其心,可成天下之业。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  143 随笔 :: 344 文章 :: 130 评论 :: 0 Trackbacks

ibatis 用得正爽,可突然遇上表中的列名是中文,傻眼了,根本不识别列名,全是乱码,怎么办?发现处理办法非常简单,就是把映射文件的编码改为 GB2312 就可以了:

代码
<?xml version="1.0" encoding="GB2312"?>  

like在不同的数据库好像用法都不一样
select * from table where colName like '%' || #value# || '%'不起作用。按照官方的解释,如果你想要的查询是:

select * from foo where value like 'x%'
那么你在 xml 映射文件中可能会写:

select * from foo where value like #parm#
但是经过 ibatis 转换以后会变成:

select * from foo where value like ?
所以你就什么也查不到了。怎么解决呢?有两种方法,一是自己处理参数 "x%",也就是自己先在程序里面对传入的参数包裹一下,就像这样:

String param = "%" + param + "%"
然后再把 param 传给 ibatis,这方法确实有效,但会使你很容易搞不清楚什么时候在哪里加了 like 了。第二种方法就是写成:

select * from foo where value like #parm# || '%'(对我不起作用)
要使它对大小写不敏感,还可以写成:

select * from foo where upper(value) like '%%' || upper(#parm#) || '%%'(没有实验过)
总之,目前还没有比较满意的解决 like,大家有什么好办法吗?




最终我使用这样的方法解决了

select * from foo where value like '%$parm$%'




看我写的:
<!-- 按用户角色列表和相应的条件查询员工 -->
 <select id="getEmployeeByWhere"  resultMap="EmployeeInfoResult">
 
  SELECT DISTINCT e.* FROM employeeinfo AS e,roleteam r,team
  t,department d,organization o where r.tid = t.tid and e.tid =
  t.tid and t.deptid = d.deptid and d.oid = o.oid
  <dynamic prepend="and">
   <iterate property="roles" prepend="and" conjunction="or" open="("
    close=")">
    roleId = #roles[]#
   </iterate>
   <isNotEqual prepend="and" property="deptid"
    compareValue="0">
    d.deptid = #deptid#
   </isNotEqual>
   <isNotEqual prepend="and" property="oid" compareValue="0">
    o.oid = #oid#
   </isNotEqual>
   <isNotEqual prepend="and" property="tid" compareValue="0">
    t.tid = #tid#
   </isNotEqual>
   <isNotNull prepend="and" property="cnname">
    e.cnname like '%$cnname$%'
   </isNotNull>
  </dynamic>
  order by e.id desc
 </select>

posted on 2007-12-12 14:14 礼物 阅读(3447) 评论(0)  编辑  收藏 所属分类: ibatis