SSH框架中的多條件搜尋功能

2021-07-10 08:58:41 字數 3749 閱讀 4641

記得第一次接觸專案的任務就是實現多條件搜尋的功能。由於本人菜鳥一枚,也是第一次寫部落格,想做做網路筆記,各位大牛有什麼更好的方法,希望能提出來,借鑑借鑑,相互學習,共同進步。

我做的多條件搜尋功能的思路就是拼接sql語句或者拼接hql語句,我相信各位大牛們也會懂。

舉個例子:

學生表:id,學號,姓名,年齡

student: id,snumber,sname,age

老師表:id,姓名,工號,年齡

teacher: id,tname,tnumber,age

(教師與學生關聯表):學生id,教師id

relationship: studentid,teacherid

選修課程表:id,老師id,學生id,課程名稱

course:id,teacherid,studentid,name

對於學生表,老師表,課程表的id都是主鍵,而教師與學生關聯表則是由學生id與教師id構成該錶的主鍵。

學生與教師是多對多關係,學生有多個老師指導,老師可以教導多個學生,所以需要乙個關聯表,來記錄他們的關係。

至於選修課程表就是,學生可以選修的不同課程來學習,教師也可以選擇不同的選修課程來指導。(不要說為什麼課程表不放到關聯表裡,因為這只是個例子,你可以理解成,「乙個老師教不同課程,學生也上這個老師的不同課程」)

學生表對應的pojo類:studentbean

教師表對應的pojo類:teacherbean

關聯表對應的pojo類:relationshipbean

課程表對應的pojo類:coursebean

至於hibernate的配置對映檔案,就不詳細貼出來了,把表與表之間具體關係如下圖:

然後我們說說多條件搜尋的問題了,多條件搜尋就是拼接hql語句,後台用json獲取前台傳遞的資料。
問題1:搜尋教師名字中含有「李」字和學生名字中含有「張」字的課程資訊。

搜尋條件:教師名字,學生名字(都是模糊搜尋)

得出結果:符合條件的課程資訊列表

思路:先通過給定的搜素條件,來獲取學生的id,教師的id,然後分別存進set裡面,然後判斷set是否為空,不為空,就遍歷set,執行的hql語句可能是:

1. from coursebean where 1=1;

2. from coursebean where 1=1 and studentid = 『」+sid+」』 and techerid = 『」+tid+」』;

3. from coursebean where 1=1 and techerid = 『」+tid+」』;

4. from coursebean where 1=1 and studentid = 『」+sid+」』;

最後就得出你想要的課程資訊列表。。。

**方法:

public string webquerycourse(jsonobject json) throws exception}}

if(tname!=null&&tname.length()>0)

}

}if(studentset.size()>0)

}else

}}else

if(teacherset.size()>0)

}listcourselist = getdaofacade().querybyhql(hql);

if(courselist !=null)

}resultobj.put("courselist",courselist);

return resultobj.tostring();

}catch(exception e)

}

問題2:搜尋名字中帶有「李」字和指導的學生中名字帶有「張」字的教師資訊。

搜尋條件:教師姓名,學生姓名(模糊搜尋)

得出結果:符合搜尋條件的教師資訊

思路:如下圖:

方法1:

public string webqueryteacher(jsonobject json) throws exception

//addorder()按屬性進行排序

tquerys.addorder(order.desc("id"));

//新建乙個學生的查詢

detachedcriteria squery = detachedcriteria.forclass(studentbean.class);

if(sname!=null)

//獲取上述兩個查詢出來符合條件的兩個beanlist

listteacherlist = getdaofacade.getbycriteria(tquery);

liststudentlist = getdaofacade.getbycriteria(squery);

if(teacherlist !=null)}}

}} //遍歷teacherset,把符合所有條件的教師資訊存進jsonobject中去,再存進jsonarray的陣列裡,然後返回給前台

iteratorit = teacherset.iterator();

while(it.hasnext())

resultobj.put("teacherlist",teacherlist);

return resultobj.tostring();

}catch(exception e)

}

方法2:拼接hql語句

思路:先判斷是否有學生姓名傳入,沒有則直接進行教師搜尋,若也沒有教師條件,則進行全部搜尋。若有學生姓名條件傳入,則先做學生姓名的條件模糊搜尋,再判定有沒有教師,沒有教師條件傳入,就根據學生姓名條件獲取學生id,獲取關聯表的教師id,得出教師資訊。若有教師條件傳入,則先獲取符合條件的學生id,根據學生id獲取關聯表的教師id1,把教師id1存進乙個set裡面,然後做教師條件的搜尋,獲取符合條件的教師list,取教師list中的每乙個id與set中的id做對比,set中有這個list中的id,則存進另乙個set(teacherset)中去,遍歷teacherset然後存進json,存入jsonarray,返回前台

public

string webqueryteacher2(jsonobject json) throws exception

}if(tname!=null&&tname.length()>0)

resultobj.put(teacherlist); }}

}else

resultobj.put(teacherlist);

}}else

if(tname!=null&&tname.length()>0)

resultobj.put("teacherlist",teacherlist);

}else

resultobj.put("teacherlist",teacherlist);

}return resultobj.tostring();

}catch(exception e)

}

2018-08-07

賬號找回來了,現在改用mybatis了,上面**可能有點累贅

django 中多條件搜尋

django中我們一般用orm進行資料的互動操作,單條件搜尋比較方便,那多條件呢?吐槽完上面的,我們看看下面的 models就不曬了,直接上views 多條件查詢一行 就能搞定,我之前還在自己寫if,else進行判斷取值 login required def api case search requ...

grails多條件搜尋功能實現1

以gdepot為例 1.建立搜尋頁面 searchform.gsp 如下 category title description price to 第二步 找到 goodscontroller.groovy檔案 新增乙個空方法 def searchform 或者空的閉包 def searchform ...

多條件搜尋功能的sql語句拼寫技巧

size small 初來咋到,先來一段測試 看看效果 當根據多個查詢條件完成搜尋功能時,要進行sql語句的拼寫,當某項搜尋條件為空時即表示不考慮此條件。我們都用 and 來連線各個搜尋條件,於是很容易出現sql語句為 where and 列名 like 的情況。這樣就出現sql語句的語法錯誤,為了...