?今天是劉小愛自學Java的第110天。
感謝你的觀看,謝謝你。
話不多說,開始今天的學習:
事先說明:關于今天的搜索功能實現。
并沒有使用到倒排索引這樣的主流搜索技術,就一個普通的模糊查詢。
在此之前,先學一個小的知識點,sql語句動態(tài)拼接。
一、sql語句動態(tài)拼接
我們編寫sql語句,一般都是通過預編譯查詢,使用問號這個通配符”?“
但是有的時候會存在某個參數不存在的情況。
比如說這一次查詢前端傳來了3個參數,下一次卻只傳了2個參數。
面對這個問題,那該怎么辦呢?
就需要使用到sql語句的動態(tài)拼接了。
其中代碼編寫如下:
①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)頁面,如下圖:
要解決兩個問題:
①是我們要給搜索綁定一個點擊事件,點擊之后就會跳轉到route_list頁面,展示查詢到的對應數據。
綁定的函數為queryByRame()。
②我們要獲取搜索框中輸入的數據
這里就可以通過層級選擇器$(“.search input”)選中搜索框對應的標簽。
2前端代碼實現
定義函數queryByRame()
①獲取搜索框中的內容
使用層級選擇器,調用jQuery的val()方法可以獲取對應搜索框中的數據。
②跳轉route_list.html頁面
location.href即可跳轉對應頁面,同時將rname作為參數傳遞給后臺。
③route_list.html頁面代碼
在②中跳轉是攜帶了一個參數,自然是需要獲取該參數,再將其增加到服務器請求參數中。
其中要將參數進行解碼,因為瀏覽器會自動將在搜索框中輸入的數據進行編碼。
使用decodeURL()功能即可完成編碼。
3后臺接受該參數
在web層中獲取rname具體的值。
同時在將其作為參數傳遞給service層,而service層也增加該參數去dao層查詢。
其它代碼都不用改變,只是增加了一個rname參數。
同樣的道理,在dao層中也動態(tài)拼接sql語句。
總之可以先寫出完整的sql語句,再動態(tài)拼接rname這個參數。
檢查方式就可以通過debug來判斷sql語句拼接的是否正確。
三、搜索框數據回填
我們在搜索框中輸入信息之后,點擊搜索,搜索框的內容會消失。
而事實上都應該還會存在,那該怎么辦呢?
就需要考慮到數據回填:
大致的一個思路是:
獲取搜索框中的數據后,利用val方法將其重新設定到對應的標簽中。
其中值得注意的是:
參數要解碼,以及要綁定頁面加載事件。
最后
謝謝你的觀看。
如果可以的話,麻煩幫忙點個贊,謝謝你。