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