2011-09-21 118 views
0

我需要一些建議如何在數據庫中執行搜索。例如我在數據庫中有一個表名爲:Student的列是:NAME, SURNAME, UNIVERSITY, AGE, COURSE在數據庫中搜索

當我填寫搜索表單時,我沒有指定SURNAME和UNIVERSITY,我希望我的搜索結果是每個學生,其中NAME =我指定的名稱,年齡 - 我指定的年齡和課程 - 我指定的課程和SURNAME和大學可以是任何。

有人可以給我一些建議嗎?

編輯

感謝快速重播。但似乎我不明白的東西或它不工作。這是我真正的查詢:

SELECT UNIVERSITY, INFORMANT_NAME, AGE 
FROM informant 
WHERE UNIVERSITY='%VDU%' 
    AND INFORMANT_NAME='%Mindaugas Jonaitis%' 
    AND AGE='%21%'; 

它不會返回任何結果。

SELECT UNIVERSITY, INFORMANT_NAME, AGE 
FROM informant 
WHERE UNIVERSITY='VDU' 
    AND INFORMANT_NAME='Mindaugas Jonaitis' 
    AND AGE='21'; 

此查詢確實存在,但僅限於指定的值。我希望返回的結果是來自表格的所有數據,其中UNIVERSITY = 'VDU'或其他值未提供或提供空值或將被跳過的內容。

SELECT UNIVERSITY, INFORMANT_NAME, AGE 
FROM informant 
WHERE UNIVERSITY='VDU' 
    AND INFORMANT_NAME='????' 
    AND AGE='????'; 

回答

0

有很多方法可以這樣做。但是對於他們所有人而言,您需要從Hibernate獲取Session。從你這一點可以:

  • 創建從named query
  • 一個query對象創建從sql string
  • 一個Query對象創建Criteria對象

所有這些話,只是或者是query.list()criteria.list()

欲瞭解更多信息:

1

如果你想使用你需要使用LIKE,不=通配符。

​​

但是使用like與領先的通配符將禁用該字段上使用索引的任何機會。
如果你正在使用MySQL於MyISAM,把一個一個全文索引你想用通配符和使用搜索字段:

SELECT UNIVERSITY, INFORMANT_NAME, AGE 
FROM informant 
WHERE UNIVERSITY LIKE '%VDU%' 
    AND MATCH(INFORMANT_NAME) AGAINST('Mindaugas Jonaitis') 
    AND AGE LIKE '21%'; 

Match .. against將只對搜索短語比4個字符長的工作。而且,在年齡上與領先的通配符一起搜索真的沒有意義。我通常不想讓所有的人都是21,31,41,但我經常想要得到所有20歲的人。

0

findByExample DAO方法在這裏總是很有用。