今天是劉小愛自學Java的第110天。
感謝你的觀看,謝謝你。
話不多說,開始今天的學習:
事先說明:關于今天的搜尋功能實作。
并沒有使用到反向索引這樣的主流搜尋技術,就一個普通的模糊查詢。
在此之前,先學一個小的知識點,sql語句動态拼接。
一、sql語句動态拼接
我們編寫sql語句,一般都是通過預編譯查詢,使用問号這個通配符”?“
但是有的時候會存在某個參數不存在的情況,比如說這一次查詢前端傳來了3個參數,下一次卻隻傳了2個參數。
面對這個問題,那該怎麼辦呢?
就需要使用到sql語句的動态拼接了,代碼編寫如下:
①sql語句中的cid這個參數是不确定的,有時有,有時可能沒有。
②StringBuilder的使用
先将sql語句中确定的部分存放到StringBuilder中,再建立一個集合存放參數。
③對cid做出判斷
如果cid不為空且存在,就在sql語句中拼接“ and cid = ?”,同時将cid存入參數集合中。
④拼接cid後面其它的參數
在sql語句中拼接“ limit ?,?”,然後将另外兩個固定參數存入集合。
注意:sql拼接過程中空格不要忘記了,總之要保證拼接後的sql要和①中的一樣,通過debug可以檢視。
⑤查詢資料
将動态存放sql語句的StringBuilder轉換成字元串,将存放參數的集合轉換成數組,再使用jdbcTemp查詢。
二、前背景代碼編寫
1業務分析
我們要找到搜尋框所在的靜态頁面,如下圖:
要解決兩個問題:
①是我們要給搜尋綁定一個點選事件,點選之後就會跳轉到route_list頁面,展示查詢到的對應資料。
綁定的函數為queryByRname()
②我們要擷取搜尋框中輸入的資料。
這裡就可以通過層級選擇器$(“.search input”)選中搜尋框對應的标簽。
2前端代碼實作
定義函數queryByRname()
①擷取搜尋框中的内容
使用層級選擇器,調用jQuery的val()方法可以擷取對應标簽中的資料,這裡也就是搜尋框。
②跳轉route_list.html頁面
location.href即可跳轉對應頁面。同時将rname作為參數傳遞給背景。
③route_list.html頁面代碼
在②中跳轉是攜帶了一個參數,自然是需要擷取該參數,再将其增加到伺服器請求參數中。
其中要将參數進行解碼,因為浏覽器會自動将在搜尋框中輸入的資料進行編碼。
使用decodeURL()功能即可完成編碼。
3背景接受該參數
在已有的業務邏輯基礎上添加參數即可
隻需要在web層中增加擷取rname這個資料的代碼。
同時在将其作為參數傳遞給service層,而service層也增加該參數去dao層查詢。
其它代碼都不用改變,隻是增加了一個rname參數。
同樣的道理,在dao層中也動态拼接sql查詢語句。
總之可以先寫出完整的sql語句,再動态拼接rname這個參數。
檢查方式就可以通過debug來判斷sql語句拼接的是否正确。
三、搜尋框資料回填
我們在搜尋框中輸入資訊之後,點選搜尋,搜尋框的内容會消失。
而事實上都應該還會存在,那該怎麼辦呢?
就需要考慮到資料回填:
大緻的一個思路是:
擷取搜尋框中的資料後,将其重新設定到對應的标簽中。
其中值得注意的是:
參數要解碼,以及要綁定頁面加載事件。
最後
謝謝你的觀看。
如果可以的話,麻煩幫忙點個贊,謝謝你。