一、Mybatis-PageHelper實作分頁
public ServerResponse manageGetProductList(int pageNum, intpageSize){//startPage--start//填充自己的sql查詢邏輯//pageHelper-收尾
PageHelper.startPage(pageNum, pageSize);
List productList =productMapper.selectProductList();
List productListVoList =Lists.newArrayList();for(Product product : productList){
ProductListVo productListVo=assembleProductListVo(product);
productListVoList.add(productListVo);
}//給前端的是productListVO,但是需要productList進行分頁
PageInfo pageInfo = newPageInfo(productList);
pageInfo.setList(productListVoList);returnServerResponse.createBySuccess(pageInfo);
}
主要代碼:
//startPage--start//填充自己的sql查詢邏輯//pageHelper-收尾//傳入參數
PageHelper.startPage(pageNum, pageSize);//對結果進行封裝
PageInfo pageInfo = newPageInfo(productList);//傳回
return pageInfo ;
二、Mybatis-PageHelper實作動态排序
//排序處理 PageHelper的排序參數格式:price asc; price desc;
if(StringUtils.isNotBlank(orderBy)){if(Const.ProductListOrderBy.PRICE_ASC_DESC.contains(orderBy)){
String[] orderByArray= orderBy.split("_");
PageHelper.orderBy(orderByArray[0] + " " + orderByArray[1]);
}
}
傳入的參數orderBy形式:price_asc或price_desc,傳入到PageHelper中為price asc。
可以進行封裝成枚舉類或内部接口
public interfaceProductListOrderBy{//Set查詢效率為O(1), List為O(n)
Set PRICE_ASC_DESC = Sets.newHashSet("price_desc","price_asc");
}
三、Mybatis中對List周遊
當Mybatis中參數為List的時候,需要周遊List中參數。
如:
List selectByNameAndCategoryIds(@Param("keyword") String productName, @Param("categoryList") List categoryList);
底層實作:
使用
進行周遊。
SELECTFROM
mmall_product
WHERE status= 1
AND name LIKE #{productName}
and category_id in
#{item}
四、Mybatis中where語句動态拼裝
方法:
List selectByNameAndId(@Param("productName") String productName,
@Param("productId") Integer productId);
當傳入的參數productName和productId都有可能為null的時候,需要在底層實作進行判斷。
wherename LIKE #{productName}
AND id=#{productId}
這樣當productName為null的時候,整個語句變為
where and id = #{productId}
而使用标簽可以避免這個問題。
AND name LIKE #{productName}
AND id=#{productId}
當productName為null 的時候,會自動忽略productId前的AND。
完整實作:
SELECTFROM mmall_product
AND name LIKE #{productName}
AND id=#{productId}