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当你在点击排序的时候就可以正常排序了,而且数据是服务端分页
相关文章推荐
- 解决Mysql数据库实现多表联合查询及按照其中一个字段进行排序问题
- 表格不能垂直居中问题解决一例(超简单)
- EDB 数据库实现多字段排序的问题。
- json 串排序 遇到的问题 安照日期倒序 等解决 (按照里面日期字段倒序)
- EDB 数据库实现多字段排序的问题。
- 解决VC6不能停止编译的问题,顺带美化下,让VC6实现XP风格界面
- 完美解决Collections.sort对double不能排序问题
- List<Object>集合按照Object的某个字段排序,解决取不到父类字段问题
- 解决GridView分页后不能导出到Excel问题的办法
- [原创][利用TDC实现表格的排序,过滤,上下条滚动及表格分页]
- 使用jqGrid表格插件不能翻页之解决问题的方法
- 触发器(当2个表中的相应值改变时同时改变一个表中的一个字段)(同时有处理“无法解决 equal to 操作的排序规则冲突”问题)
- ExtJs 表格问题不能选中的解决方法
- Java小程序---接口中抽象方法的实现(解决了JAVA语言不能多继承的问题)
- 解决grid选中行分页后不保持的问题(实现分页多选记忆功能)
- 解决DataGridView绑定List后不能排序的问题
- 解决CodeSmith不能读取MySql数据库字段说明的问题
- 解决GridPager分页组件复选框不能全选问题
- 学习之路八:解决不能调试服务端代码的问题
- oracle翻页,排序字段重复,翻页结果重复 问题的解决方法