1. 程式人生 > >mybatis 的條件查詢的三個方法實現

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查詢資料庫

      //itemsQueryVoservice直接傳遞到dao

return itemsMapperCustom.findItemsList(itemsQueryVo);

   }

2.3controller 中呼叫 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();

// 相當於requesrsetAttribut,在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;

   }