Rory's Blog
          Happy study,Happy work,Happy life
          posts - 22,  comments - 46,  trackbacks - 0
          不知道大家有沒有碰到,還是沒有這種需求。就是用like來查詢,我們沒有用Lucene,Compass這種全文索引的方案,我們只是簡單的添加%進行l(wèi)ike查詢。用戶搜索的時候就使用*和?來代表任意和一個。所以要對"%"和"_"進行轉(zhuǎn)義,我們使用的是oracle數(shù)據(jù)庫。sql語句看起來可能是這樣的。
          SELECT?*?FROM?t_user?where?nickname?like?'%Goo\_D'?escape?'\'
          這里對_進行轉(zhuǎn)義了。因為用戶昵稱包含下劃線,如果不進行轉(zhuǎn)義就表示一個任意字符。有時候我們可能還需要對%進行轉(zhuǎn)義。同樣的方法在%前加\% 但是比起普通的like語句。多了一個聲明轉(zhuǎn)義符的語句。所以我們會想到這樣的語句
          DetachedCriteria?criteria?=?DetachedCriteria.forClass(User.class);
          criteria.add(Restrictions.like(
          "nickname",?user.getNickname()+"'?escape'\"));
          但是這樣是不管用的。
          接下來可能會想到使用Hibernate3的原生sql查詢,其實我們不需要這樣做。我們還是使用Criteria條件查詢。
          criteria.add(Restrictions.sqlRestriction("{alias}.nickname?like???escape'/'",?StringUtil.escapeSQLLike(user.getNickname()),?Hibernate.STRING));
          這樣Hibernate產(chǎn)生的語句就是我們想要的語句了。
          ????/**
          ?????*?轉(zhuǎn)義like語句中的
          ?????*?<code>'_'</code><code>'%'</code>
          ?????*?將<code>'?'</code>轉(zhuǎn)成sql的<code>'/_'</code>
          ?????*?將<code>'%'</code>轉(zhuǎn)成sql的<code>'/%'</code>
          ?????*?<p>
          ?????*???例如搜索<code>?aa*bb?c_d%f</code>將轉(zhuǎn)化成<br/>
          ?????*???<code>_aa%bb_c/_d/%f</code>
          ?????*?</p>
          ?????*?
          @param?likeStr
          ?????*?
          @return
          ?????*?
          @author?<a?href="http://jdkcn.com">somebody</a>
          ?????
          */
          ????
          public?static?String?escapeSQLLike(String?likeStr)?{
          ????????String?str?
          =?StringUtils.replace(likeStr,?"_",?"/_");
          ????????str?
          =?StringUtils.replace(str,?"%",????"/%");
          ????????str?
          =?StringUtils.replace(str,?"?",?"_");
          ????????str?
          =?StringUtils.replace(str,?"*",?"%");
          ????????
          return?str;
          ????}

          創(chuàng)造共用協(xié)議:署名,非商業(yè),保持一致?? 除經(jīng)特別注明外,本文章版權歸莫多泡泡所有.
          署名,非商業(yè)用途,保持一致.???somebody(莫多)
          posted on 2006-10-16 23:29 莫多 閱讀(2502) 評論(1)  編輯  收藏 所屬分類: Hibernate

          FeedBack:
          # re: 關于Hibernate3的escape解決方法
          2006-10-18 14:40 | 123bingbing
          增開7群,號碼 30440732
          8群 30756649
          9群 30178567
          10群 28694497

          我們的qq群:15096318 學習程序的都可以來  回復  更多評論
            

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆分類(27)

          隨筆檔案(22)

          Friends

          搜索

          •  

          積分與排名

          • 積分 - 62468
          • 排名 - 845

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 大石桥市| 溆浦县| 朝阳市| 布拖县| 农安县| 灌阳县| 青海省| 阿合奇县| 太仆寺旗| 靖江市| 安仁县| 嘉黎县| 慈溪市| 嘉定区| 宝山区| 辽宁省| 普陀区| 行唐县| 昌江| 五家渠市| 永善县| 济源市| 望江县| 乌什县| 信宜市| 嘉定区| 乃东县| 青阳县| 永寿县| 聊城市| 天祝| 绥宁县| 莎车县| 禹州市| 岗巴县| 曲沃县| 莒南县| 平武县| 来宾市| 潮州市| 石渠县|