Java項目實戰(zhàn)第11天:搜索功能的實現

?今天是劉小愛自學Java的第110天。

感謝你的觀看,謝謝你。

話不多說,開始今天的學習:

image

事先說明:關于今天的搜索功能實現。

并沒有使用到倒排索引這樣的主流搜索技術,就一個普通的模糊查詢。

在此之前,先學一個小的知識點,sql語句動態(tài)拼接。

一、sql語句動態(tài)拼接

我們編寫sql語句,一般都是通過預編譯查詢,使用問號這個通配符”?“

但是有的時候會存在某個參數不存在的情況。

比如說這一次查詢前端傳來了3個參數,下一次卻只傳了2個參數。

面對這個問題,那該怎么辦呢?

就需要使用到sql語句的動態(tài)拼接了。

其中代碼編寫如下:

image

①sql語句中的cid這個參數是不確定的,有時有,有時可能沒有。

②StringBuilder的使用

在StringBuilder中存放確定的sql語句,再創(chuàng)建一個集合存放參數。

③對cid做出判斷

如果cid不為空且存在,就在sql語句中拼接“ and cid = ?”,同時將cid存入參數集合中。

④拼接cid后面其它的參數

在sql語句中拼接“ limit ?,?”,然后將另外兩個固定參數存入集合。

注意:sql拼接過程中空格不要忘記了,總之要保證拼接后的sql要和①中的一樣,通過debug可以查看。

⑤查詢數據

將動態(tài)存放sql語句的StringBuilder轉換成字符串,將存放參數的集合轉換成數組,再使用jdbcTemp查詢。

二、前后臺代碼編寫

1業(yè)務分析

我們要找到搜索框所在的靜態(tài)頁面,如下圖:

image

要解決兩個問題:

①是我們要給搜索綁定一個點擊事件,點擊之后就會跳轉到route_list頁面,展示查詢到的對應數據。

綁定的函數為queryByRame()。

②我們要獲取搜索框中輸入的數據

這里就可以通過層級選擇器$(“.search input”)選中搜索框對應的標簽。

2前端代碼實現

定義函數queryByRame()

image

①獲取搜索框中的內容

使用層級選擇器,調用jQuery的val()方法可以獲取對應搜索框中的數據。

②跳轉route_list.html頁面

location.href即可跳轉對應頁面,同時將rname作為參數傳遞給后臺。

③route_list.html頁面代碼

在②中跳轉是攜帶了一個參數,自然是需要獲取該參數,再將其增加到服務器請求參數中。

其中要將參數進行解碼,因為瀏覽器會自動將在搜索框中輸入的數據進行編碼。

使用decodeURL()功能即可完成編碼。

3后臺接受該參數

image

在web層中獲取rname具體的值。

同時在將其作為參數傳遞給service層,而service層也增加該參數去dao層查詢。

其它代碼都不用改變,只是增加了一個rname參數。

image

同樣的道理,在dao層中也動態(tài)拼接sql語句。

總之可以先寫出完整的sql語句,再動態(tài)拼接rname這個參數。

檢查方式就可以通過debug來判斷sql語句拼接的是否正確。

三、搜索框數據回填

我們在搜索框中輸入信息之后,點擊搜索,搜索框的內容會消失。

而事實上都應該還會存在,那該怎么辦呢?

就需要考慮到數據回填:

image

大致的一個思路是:

獲取搜索框中的數據后,利用val方法將其重新設定到對應的標簽中。

其中值得注意的是:

參數要解碼,以及要綁定頁面加載事件。

最后

謝謝你的觀看。

如果可以的話,麻煩幫忙點個贊,謝謝你。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容