您的位置:首页 > 其它

Guns实现服务端分页并解决表格字段不能排序的问题

2019-04-26 16:29 387 查看

山涧抚琴曲意浓,马蹄轻骑过客心。叹探贪弹啊!

1.在前端分页的时候client我们只要sortable=true就会出现升序和降序的图标并实现排序,但当我们变成server端分页时,该排序方法就行不通了,如果我们也想在服务端动态的排序,那么接下来就是开挂的时候啦,小板凳拉好,瓜子西瓜已到位,灯光开启,走你。

我们再点击上下排序的剪头的时候我们可以发现Headers里面,已经帮我们传递了sortOrder,sortName排序字段,我们只需要获取他传给后台处理

controller层

[code]@RequestMapping(value = "/list")
@ResponseBody
public Object list(String order_id, String mer_name, String merchant_bn, String beginTimestamp, String endTimestamp, String sourceId, String paymentId, String payStatusId, String contactMobile, String contactPerson, String sourceName, String pageNumber, String pageSize,@RequestParam(value="sortOrder",required = false)String sortOrder,@RequestParam(value="sortName",required = false)String sortName) {
//排序参数处理驼峰转下划线
if(StringUtils.isNotBlank(sortName) && sortName != null){
sortName = UnderlineToCamelUtils.camelToUnderline(sortName);
}
logger.info("-----------开始查询订单表格接收参数:【pageNumber:"+pageNumber+"】【pageSize:"+pageSize+"】【sortOrder:"+sortOrder+"】【sortName:"+sortName+"】-----------");
long startTime = System.currentTimeMillis();
//查询表格数据
int page_number = Integer.valueOf(pageNumber);
int page_size = Integer.valueOf(pageSize);

Page<SdbB2cOrders>  sdbB2cOrdersPage = sdbB2cOrdersService.querySdbB2cOrderList2(order_id,mer_name,merchant_bn,beginTimestamp,endTimestamp,sourceId,paymentId,payStatusId,contactMobile,contactPerson,sourceName,page_number,page_size,sortOrder,sortName);
if(sdbB2cOrdersPage != null){
List<SdbB2cOrders> records = sdbB2cOrdersPage.getRecords();
for (SdbB2cOrders record : records) {
String createtime = record.getCreatetime();
record.setCreatetime(TimeUtil.toDate(createtime));
}
HashMap<String, Object> map = new HashMap<>();
map.put("total",sdbB2cOrdersPage.getTotal());
map.put("rows",records);
long endTime = System.currentTimeMillis();
logger.info("-------------查询订单表格总计用时:【"+(endTime-startTime)+"】--------------");
return map;
}
return null;

}

2.service层

[code]    Page<SdbB2cOrders> querySdbB2cOrderList2(String order_id, String mer_name, String merchant_bn, String beginTimestamp, String endTimestamp, String sourceId, String paymentId, String payStatusId, String contactMobile, String contactPerson, String sourceName, int pageNumber, int pageSize,String sortOrder,String sortName);

3.serviceImpl

[code] @Override
public Page<SdbB2cOrders> querySdbB2cOrderList2(String order_id, String mer_name, String merchant_bn, String beginTimestamp, String endTimestamp, String sourceId, String paymentId, String payStatusId, String contactMobile, String contactPerson, String sourceName, int pageNumber, int pageSize,String sortOrder,String sortName) {
Page<SdbB2cOrders> sdbB2cOrdersPage = new Page<>(pageNumber, pageSize);
Page<SdbB2cOrders> sdbB2cOrdersPage1 = sdbB2cOrdersPage.setRecords(baseMapper.querySdbB2cOrderList2(order_id, mer_name, merchant_bn, beginTimestamp, endTimestamp, sourceId, paymentId, payStatusId, contactMobile, contactPerson, sourceName, sdbB2cOrdersPage,sortOrder,sortName));
return sdbB2cOrdersPage1;
}

4.mapper层

[code]List<SdbB2cOrders> querySdbB2cOrderList2(@Param("order_id") String order_id, @Param("mer_name") String mer_name, @Param("merchant_bn") String merchant_bn, @Param("beginTimestamp") String beginTimestamp, @Param("endTimestamp") String endTimestamp, @Param("sourceId") String sourceId,@Param("paymentId")String paymentId,@Param("payStatusId")String payStatusId,@Param("contactMobile") String contactMobile,@Param("contactPerson") String contactPerson,@Param("sourceName")String sourceName, Page<SdbB2cOrders> sdbB2cOrdersPage,@Param("sortOrder")String sortOrder,@Param("sortName")String sortName);

5.mapper.xml

[code] <select id="querySdbB2cOrderList2" resultMap="BaseResultMap">
SELECT
s.*,
m.mer_name,
m.contact_name as contact_person,
m.contact_phone as contact_mobile
FROM
sdb_b2c_orders s
LEFT JOIN sdb_basic_merchant m ON s.merchant_bn = m.mer_no AND m.mer_name != ''
where 1 = 1
<if test="order_id != null and order_id !=''">
and s.order_id = #{order_id}
</if>
<if test="mer_name != null and mer_name !=''">
and m.mer_name = #{mer_name}
</if>
<if test="merchant_bn != null and merchant_bn !=''">
and s.merchant_bn = #{merchant_bn}
</if>
<if test="beginTimestamp != null and beginTimestamp !=''">
<![CDATA[
and s.createtime >=  #{beginTimestamp}
]]>
</if>
<if test="endTimestamp != null and endTimestamp !=''">
<![CDATA[
and s.createtime <=  #{endTimestamp}
]]>
</if>
<if test="sourceId != null and sourceId != ''">
and s.source = #{sourceId}
</if>
<if test="paymentId != null and paymentId != ''">
and s.payment = #{paymentId}
</if>
<if test="payStatusId != null and payStatusId != ''">
and s.pay_status = #{payStatusId}
</if>
<if test="contactMobile != null and contactMobile != ''">
and m.contact_phone LIKE CONCAT('%',#{contactMobile},'%')
</if>
<if test="contactPerson != null and contactPerson != ''">
and m.contact_name LIKE CONCAT('%',#{contactPerson},'%')
</if>
<if test="sourceName != null and sourceName != ''">
and s.source_name = #{sourceName}
</if>
AND s.pay_status = '1'
order by
<choose>
<when test="sortName!=null and sortName != ''and sortOrder != null and sortOrder != ''">
${sortName} ${sortOrder}
</when>
<otherwise>
createtime desc
</otherwise>
</choose>
</select>

5.因为在order by 后是表格里的列名,而再传参时,浏览器已经帮我们处理成了驼峰形式,所以记得转为列名

[code]        //排序参数处理驼峰转下划线
if(StringUtils.isNotBlank(sortName) && sortName != null){
sortName = UnderlineToCamelUtils.camelToUnderline(sortName);
}

 下划线和驼峰转换工具

[code]import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* 驼峰法-下划线互转
* @author cshaper
* @since 2015.07.04
* @version 1.0.0
*/
public class UnderlineToCamelUtils {

/**
* 下划线转驼峰法
* @param line 源字符串
* @param smallCamel 大小驼峰,是否为小驼峰
* @return 转换后的字符串
*/
public static String underlineToCamel(String line,boolean smallCamel){
if(line==null||"".equals(line)){
return "";
}
StringBuffer sb=new StringBuffer();
Pattern pattern=Pattern.compile("([A-Za-z\\d]+)(_)?");
Matcher matcher=pattern.matcher(line);
while(matcher.find()){
String word=matcher.group();
sb.append(smallCamel&&matcher.start()==0?Character.toLowerCase(word.charAt(0)):Character.toUpperCase(word.charAt(0)));
int index=word.lastIndexOf('_');
if(index>0){
sb.append(word.substring(1, index).toLowerCase());
}else{
sb.append(word.substring(1).toLowerCase());
}
}
return sb.toString();
}
/**
* 驼峰法转下划线
* @param line 源字符串
* @return 转换后的字符串
*/
public static String camelToUnderline(String line){
if(line==null||"".equals(line)){
return "";
}
line=String.valueOf(line.charAt(0)).toUpperCase().concat(line.substring(1));
StringBuffer sb=new StringBuffer();
Pattern pattern=Pattern.compile("[A-Z]([a-z\\d]+)?");
Matcher matcher=pattern.matcher(line);
while(matcher.find()){
String word=matcher.group();
sb.append(word.toUpperCase());
sb.append(matcher.end()==line.length()?"":"_");
}
return sb.toString();
}
}

OK当你在点击排序的时候就可以正常排序了,而且数据是服务端分页

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐