针对批量操作的工具类

在使用导入导出功能时,会有选中多条甚至几百上千条进行导出,这个时候就是需要批量了,刚开始只会导全部和导单笔,现在配合这样一条工具类就可以了。

1.工具类格式

 public static List<List<String>> splitStringList(List<String> list, int len) {
        if (list == null || list.size() == 0 || len < 1) {
            return null;
        }

        List<List<String>> result = new ArrayList<List<String>>();


        int size = list.size();
        int count = (size + len - 1) / len;


        for (int i = 0; i < count; i++) {
            List<String> subList = list.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1)));
            result.add(subList);
        }
        return result;
    }

这是一种list里面进行String类型的一种写法,当然,如果你想写实体或者其他类型的格式只需要替换即可。下面给出另外一种格式的工具类形式。

public static List<List<FlxCreditcardPayment>> splitListFlxCreditcardPayment(List<FlxCreditcardPayment> list, int len) {
		if (list == null || list.size() == 0 || len < 1) {
			return null;
		}

		List<List<FlxCreditcardPayment>> result = new ArrayList<List<FlxCreditcardPayment>>();


		int size = list.size();
		int count = (size + len - 1) / len;


		for (int i = 0; i < count; i++) {
			List<FlxCreditcardPayment> subList = list.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1)));
			result.add(subList);
		}
		return result;
	}

这就是典型的一种使用实体类的格式。

2.页面获取批量id

我采用的是通过在页面定义一个form表单,通过选中回显到form表单里面,通过form表单的submit进行提交,后台接收即可。

2.1定义表单,获取批量id回显。

<table id="table1" lay-filter="test">
	    </table>
	     <form action="/logs/logtest" id="tableForm" name="tableForm" method="post" >
		      <div id="test">
		      
		      </div>
         </form>
function toOut(){
        var arr=[];  
    	var checkStatus = table.checkStatus('table1');
        var datas = checkStatus.data;
        //var params =  JSON.stringify(datas);
        for(var i=0;i<datas.length;i++){
             var ipt = document.createElement("input");
            ipt.setAttribute("type","hidden");
            ipt.setAttribute("name","params");
            ipt.setAttribute("value",datas[i].id);
            var div = document.getElementById("test");
            div.appendChild(ipt); 
            arr.push(datas[i].id);
        }
        $("#tableForm").submit();
    }

点击导出按钮,会将获取到的数组里面的id回显到form表单中,在这里可以看到在表单中定义了一个div,里面给定相应的元素,并赋给相应的属性,其中,params就是获取到的id,最后,通过submit表单进行提交到后台。

3,后台接收,调用相应的工具类进行截取操作

@ApiOperation("log导出excel测试")
	@PostMapping("/logtest")
	public void downloadExcelLog(HttpServletRequest request,HttpServletResponse response) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
		String [] ar = (request.getParameterValues("params"));
		List<String> list = new ArrayList<String>();
		for (String str : ar) {
			list.add(str);
		}
		List<List<String>> listss = PaymentUtil.splitStringList(list, 100);
		List<SysLogsDto> lists = new ArrayList<SysLogsDto>();
		for (List<String> end : listss) {
		 lists = sysLogsDao.getById(end);;
		}
		String fileName = "log测试excel导出下载";
		ExcelUtil.excelExport4Template(
				fileName,  ExcelTemplate.LOG_INFO_TEMPLATE,
				lists, response,SysLogsDto.class);
		
		}

首先定义一个数组接收前台传过来的id,定义一个空的list集合进行遍历存值进行类型转换,注意这里的泛型是String,其次,调用工具类方法,第一个参数就是装载id的list集合,第二个就是批量条数,这里的批量条数自己可以根据实际情况测试后进行定义,最终用一个新的list集合接收查询出来的数据,最后通过模板进行输出即可。

4.sql语句

<select id="getById" parameterType="java.util.List" resultType="com.youfuli.admin.server.dto.SysLogsDto">
	    SELECT
			*
		FROM
			t_sys_logs as t
		where t.id in
		<foreach collection="list" index="index" item="item" open="(" separator="," close=")">   
           #{item} 
        </foreach>
		 order by t.createtime desc
	</select>

其中,主要是foreach里面接受后台传过来的批量id进行批量处理。

5.日期格式转换

在导出操作很有可能会出现这样一种情况,日期格式不符合相应的规范,这个时候就需要比较相应的数据格式进行转换,关键词是instanceof。

首先定义一个静态的时间类型的格式:

public static final SimpleDateFormat sdf = new SimpleDateFormat(
			"yyyy-MM-dd HH:mm:ss");

其次在进行循环判断导出的数据是否是日期格式,如果是,就转换,不是则继续执行。

 objects[j] = method.invoke(m, null);
					 if(objects[j] instanceof Date){
						 objects[j] = sdf.format(new Date());
					 }

如果数据格式中的类型是date,则转换成我们想要的类型。


6.注意事项

第一点:注意前台是否拿到值,后台是否接收到值,注意调试找问题,LZ亲测。

第二点:注意mybatis中的一些转义字符的处理,比如大于,小于,这些要记住怎么转义。

<if test="params.beginTime != null and params.beginTime != ''">
                and t.createTime  &gt;= #{params.beginTime}
            </if>

其实你会发现粘贴这几行代码到博客上面,会自动帮你转成相应的格式,这里的&gt;代表的就是>

多实践,才有收获。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值