天天看點

mysql的pagehelper排序_Mybatis-PageHelper分頁/動态排序/對List周遊/where語句動态拼裝

一、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}