mybatis 的條件查詢的三個方法實現
Mybatis的多條件查查詢,傳遞引數,
第一種方法 傳遞map 型,
第二種方法 傳遞pojo
帶三種方法 多個引數如果不封裝成Map,就用序列號代替。
如果引數比較多且亂建議用map 型,如果有定義的pojo 則建議用pojo型別,如果傳遞的引數不多,則建議用序列號代替的方法。
1.Map 型(當傳入多個引數時可以使用map型)
例 : mapper.java
//分頁查詢教師資訊
public List<Teacher> findTeacherByPage(Map<String, Object> map);
相應地,這裡用到了Map介面,就應該引入此介面:import java.util.Map。
在執行類Collection中,呼叫findTeacherByPage方法的相關程式碼如下:
Map<String,Object> params=new HashMap<String, Object>();
//以name欄位升序排序,
params.put("sort", "name");
params.put("dir", "asc");
//查詢結果從第0條開始,查詢2條記錄
params.put("start", 0);
params.put("limit", 2);
//查詢職稱為教授或副教授的教師
params.put("title", "%教授");
//分頁查詢教師資訊
List<Teacher> teachers=mapper.findTeacherByPage(params);
可以看出,我們先把引數放在了一個Map中,這樣我們就可以在相應的SQL語句中以#{…}的形式引用這些引數了。如下所示:
<selectid="findTeacherByPage"resultMap="upervisorResultMap"
parameterType="java.util.Map">
select * from teacher where title like #{title} order by ${sort} ${dir} limit #{start},#{limit}
</select>
2.pojo型
2.1 . mapper.xml
<sql id="query_items_where">
<!-- 使用動態sql,通過if判斷,滿足條件進行sql拼接
商品的查詢條件需要通過ItemsQueryVo包裝物件中itemsCustom屬性傳遞
${}字串的拼接
-->
<if test="itemsCustom!=null">
<if test="itemsCustom.name!=null and itemsCustom.name!=''">
items.name LIKE'%${itemsCustom.name}%'
</if>
</if>
</sql>
<select id="findItemsList"parameterType="cn.hpu.ssm.po.ItemsQueryVo" resultType="cn.hpu.ssm.po.ItemsCustom">
SELECT * FROM items
<where>
<include refid="query_items_where"></include>
</where>
2. 2 Mapper.java
public interfaceItemsMapperCustom {
//商品類表查詢
public List<ItemsCustom> findItemsList (ItemsQueryVo itemsQueryVo)throws Exception;
}
3.Serviceimpl.java 在服務實現類中呼叫
public List<ItemsCustom>findItemsList(ItemsQueryVo itemsQueryVo)throws Exception {
//通過ItemsMapperCustom查詢資料庫
//itemsQueryVo從service直接傳遞到dao
return itemsMapperCustom.findItemsList(itemsQueryVo);
}
2.3在controller 中呼叫 itemsCustom可以輸入itemsCustom中的某個屬性值具體看mapper.xml中的sql片段
@RequestMapping("/queryItems")
public ModelAndView queryItems(HttpServletRequest request,
ItemsQueryVo itemsCustom) throws Exception {
// 呼叫service查詢資料庫,查詢商品列表,使用靜態資料模
// 測試froward後能否拿到id
System.out.println(request.getParameter("id"));
List<ItemsCustom> itemsList = itemsService.findItemsList(itemsCustom);
// 返回ModelAndView
ModelAndView modelAndView = new ModelAndView();
// 相當於requesr的setAttribut,在jsp頁面中通過itemsList來取得資料
modelAndView.addObject("itemsList", itemsList);
// 指定檢視
// 下邊的路徑在試圖解析器中配置字首和字尾
modelAndView.setViewName("items/itemsList");
//modelAndView.setViewName("/WEBINF/jsp/items/itemsList.jsp");
return modelAndView;
}
3.序列號代替
如果不想用map 也不想用pojo可以用序列號代替
Mapper.xml
<select id="login"parameterType="String" resultType="cn.hpu.back.po.Users">
SELECT * FROM users WHERE userphone= #{0} AND userpass=#{1}
</select>
Mapper.java
Users login (String userphone ,String userpass)throwsException;
Serviceimpl.java呼叫
//登入
public String logion(Stringuserphone, String userpass) throws Exception {
// TODO Auto-generated method stub
Usersstr= usersMapperCustom.login(userphone,userpass);
Stringresult=null;
if(str!=null)
result="ok";
else
result="no";
return result;
}