不知道大家有沒有碰到,還是沒有這種需求。就是用like來查詢,我們沒有用lucene,compass這種全文索引的方案,我們只是簡單的新增%進行like查詢。使用者搜尋的時候就使用*和?來代表任意和乙個。所以要對"%"和"_"進行轉義,我們使用的是oracle資料庫。sql語句看起來可能是這樣的。
select
*from
t_user
where
nickname
like
'%goo\_d
'escape'\
'這裡對_進行轉義了。因為使用者暱稱包含下劃線,如果不進行轉義就表示乙個任意字元。有時候我們可能還需要對%進行轉義。同樣的方法在%前加\% 但是比起普通的like語句。多了乙個宣告轉義符的語句。所以我們會想到這樣的語句
detachedcriteria criteria
=detachedcriteria.forclass(user.
class
);criteria.add(restrictions.like(
"nickname
", user.getnickname()+"
' escape'\
"));
但是這樣是不管用的。
接下來可能會想到使用hibernate3的原生sql查詢,其實我們不需要這樣做。我們還是使用criteria條件查詢。
criteria.add(restrictions.sqlrestriction(
".nickname like ? escape'/'
", stringutil.escapesqllike(user.getnickname()), hibernate.string));
這樣hibernate產生的語句就是我們想要的語句了。
/*** 轉義like語句中的
*'_'
'%'
* 將'?'
轉成sql的'/_'
* 將'%'
轉成sql的'/%'
* * 例如搜尋?aa*bb?c_d%f
將轉化成
*_aa%bb_c/_d/%f
* *
@param
likestr
* @return
* @author
">somebody
*/public
static
string escapesqllike(string likestr)
莫多泡泡
所有.
署名,非商業用途,保持一致.
somebody(莫多)
莫多 2006-10-16 23:29
Hibernate 3 事務 查詢
二 查詢 三 1099占用解決方案 既然hibernate要和資料庫互動,那麼事務是必須要掌握的部分 為什麼要鎖 在併發訪問的時候,不使用鎖會導致部分資料並不能儲存到資料庫 private int version 版本號 public void setversion int version publ...
Hibernate3中的更新與刪除
在hibernate2中對某個表進行更新和刪除,必須先把它load出來,在後更改,然後再儲存。這個過程對於批量操作或者對於表關係比較複雜的情況,是很複雜的。在hibernate3中hql語句中已經支援update 和delete 了 但是要注意的是update和delete的hql不是物件導向的了。...
hibernate3中的離線查詢1
假設要通過stuname查詢乙個學生student記錄,可以如下 detachedcriteria dc detachedcriteria.forclass student.class dc.add restrictions.like stuname stuname,matchmode.anywhe...