Java程序猿搬砖笔记(二)
作为码农平时搜集一些小知识点个人认为是个不错的习惯,书上说
好记性不如烂笔头
我想即使是以前忽略或者新get的很简单的东西,自己动手记下来不管如何印象也会更深刻。
1、jQuery常用的选择器整理
$(":first");//匹配第一个元素
$(":last");//匹配最后一个元素
$(":eq(index)");//在匹配的集合中选择索引值为index的元素
$(":gt(index)");//在匹配的集合中选择索引值大于index的元素
$(":even");//选择索引值为偶数的元素,从0开始计数
$(":odd");//选择索引值为奇数的元素,从0开始计数
$(“parent>child”);//子选择器:选择所有指定"parent"元素中指定的"child"的直接子元素
$(“ancestor decendant”);//后代选择器:选择给定的祖先元素的所有后代元素,一个元素的后代可能是该元素的一个孩子,孙子,曾孙等
$(“prev +next”);//相邻兄弟选择器:选择所有紧接在"prev"元素后的"next"元素
$(“prev ~sibings”);//一般兄弟选择器:匹配"prev"元素之后的所有兄弟元素
2、MyBatis批量更新
sql列子:
1 | UPDATE course |
在做编辑订单功能(现在想想都是一场噩梦)时,折腾了这个操作,java代码如下:
1 | int updateBatch(; List<ThOrderDetail> detailList) |
注:MyBatis默认会把所有集合封装为"list",如果要自定义参数名需要用@Param注解
MyBatis代码如下:
1 | <update id="updateBatch" parameterType="java.util.List"> |
执行代码后,打印出的sql如下:
1 | update |
3、POI导出Excel
- 测试方法:
1 | public static void main(String[] args) throws IOException { |
实现效果如下:
日期 | 午别 |
---|---|
20191103 | 上午 |
下午 |
- 项目中导出xcel例子:
客户给出的表格需要统计对上游付款总金额和对下游付款总金额(大于的为占用金额),然后根据这个占用金额去计算利息
有两个要求:1、第一行需要显示用款和付款 2、后面如果日期相同也要显示到同一行
这个用sql查询出来后还需要Java代码处理,总之这是今年做的最坑的需求之一(搞死开发者却不一定实用)。
后台打印出的sql如下:
1 | #分组前sql |
分组前数据库返回结果:
类型为1是采购合同,也就是对上游付款的信息,类型为2的是销售合同,也就是对下游收款的数据。可以看出同一类型同一天的数据还没有合并起来。所以还需要对这个查询结果再分组求和,sql如下:
1 | #分组后sql |
分组后数据库返回结果:
费了九牛二虎之力然而仅仅是开始,在java代码中还需要实现[1、第一行需要显示用款和付款 2、后面如果日期相同也要显示到同一行]这两个要求。大致思路是先定义一些全局的变量来记录上一条数据和第一条数据,找到第一条后再去看后面是不是有时间相同的,controller的核心代码如下:
1 | if(!ObjectUtils.isNullObj(paymentBondViewVos)){ |
只贴出了封装数据代码 (省略查询委托 合同 设置表头 合并单元格以及循环设置单元格样式等代码)。这样以后就导出需要的表格了,效果图如下:
然而作死把浏览器设置为英文后出现文件名乱码了,如下所示:
需要在浏览器的header中对中文重新进行编码:
1 | String codedFileName = java.net.URLEncoder.encode(fileName, "UTF-8"); |
这样一来,总算搞定了。。。
4、登录时返回之前的链接
在Spring中做如下配置:
1 | <!-- 记录登录返回路径 --> |
Java代码如下:
1 | public class RecordLoginInterceptor extends HandlerInterceptorAdapter { |