上次去泰国清迈的时候玩了滑翔机,但是视频文件有点大,平时也有点小忙,视频一直没剪辑,今天下午总算搞完了,视频如下:
Redis保存对象的两种方式
Redis保存对象的两种方式
一、序列化(实体需要实现Serializable接口)
- 序列化就是将一个对象转换为二进制的数据流。这样就可以进行传输,或者保存到文件中。如果一个类的对象要想实现序列化,就必须实现serializable接口。
Java程序猿搬砖笔记(二)
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(@Param("detailList")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 { |
Java程序猿搬砖笔记(一)
Java程序猿搬砖笔记(一)
作为码农平时搜集一些小知识点个人认为是个不错的习惯,书上说
好记性不如烂笔头
我想即使是以前忽略或者新get的很简单的东西,自己动手记下来不管如何印象也会更深刻。
这篇笔记截至时间2019年11月3日。
1、Tomcat设置jvm
1 | -Xms128m -Xmx1024m -XX:MaxPermSize=512m |
2、el表达式判断字符串是否为空
${值 eq null or 值 eq ’ '} 返回true 的话,表示为空。例:
1 | test="${company.custName eq null or company.custName eq ' '}" |
${empty 值} 返回true ,表示为空字符串。例:
1 | test="${empty company.custNam}" |
用empty方法更好,el表达式封装了
3、el表达式判断
==、eq、//相等
!=、ne、// 不相等(inequality)
<、lt、//小于(less than)
>、gt、//大于(greter than)
<=、le、//小于等于(less equal)
>=、ge。//大于等于(greter equal)
例子:判断传过来的值是否大等于2
1 | test="${product.validity ge 2}" |
4、MyBatis遍历集合
1 | <foreach collection ="array" item="classIds" open="(" separator="," close=")"> |
MyBatis foreach的collection参数可以是java的Array或者List
5、 jQuery的data()方法,相比attr()更安全
访问id为test的元素 的data-name属性例子:
1 | $('#test').data("name"); |
6、数据库权限问题
- cmd进入mysql/bin目录下后,mysql -u root -p并输入密码登陆
- grant all privileges on . to root@"%" identified by “.”; 注意root替换为报的错
- flush privileges;
7、MySQL的date_format函数用法
语法如下:
1 | date_format(now(),'%Y-%m-%d %H:%i:%s')<结束时间 |
8、MyBatis中小于号都要写成<大于号可以不用转
9、MyBatis传入参数为0被误认为是空字符串,解决方法是去掉等于0的判断
10、JavaScript保留两位小数方法
1 | function toDecimal(x) { |
11、jQuery判断checkbox是否选中的一些方法
方法一:
1 | if ($("#checkbox-id").get(0).checked) { |
方法二:
1 | if ($("#checkbox-id")[0].checked) { |
方法三(建议):
1 | if($('#checkbox-id').is(':checked')) { |
12、checkbox赋值方法
1 | $("#checkbox-id").prop("checked",true); |
13、JavaScript页面加载前调用的一些方法
方法一:
1 | $(function(){ |
方法二:
1 | $(document).ready(function () { |
方法三:
1 | if(document.readyState=="complete"){ |
14、判断页面元素是否显示
参考链接
15、加红色样式
1 | <font color="red">测试</font> |
16、连续数字或字母换行
1 | style="word-break:break-all; width:200px; overflow:auto;" |
17、表格内容过长时截取显示
1 | <span title="鼠标放上去显示的内容">实际显示的内容</span> |
18、科学计数法格式化
Java 返回字符串:
1 | DecimalFormat df = new DecimalFormat(); |
注意这种方法还需要替换","
JavaScript简单粗暴的方法 返回字符串
1 | var formatScientificNumber = function(value){ |
19、输入框限制只能输入数字
1 | onkeyup="this.value=this.value.replace(/[^\d]/g,'')" |
20、jQuery需要用text()取span的值
21、jQuery获取table的所有tr以及td
1 | $('#tabbleId tr').each(function(i){ // 遍历 tr |
22、MySQL的concat_ws(sperator,str1,str2,str…)、concat()、repeat()方法
- concat_ws()方法可以将两个字段的值拼接起来,它的本意是有分隔符的字符串连接。但要注意为null的情况(不然整个都会为null)
例子:1
concat_ws(c.city_code,'',ifnull(c.company_address,''))
- concat()函数可以连接一个或者多个字符串,只要一个为null就会返回Null
- repeat()函数用来复制字符串,比如select repeat(‘ab’,2);//abab
23、MySQL删除所有表数据(不是删除数据库)
返回所有drop table语句语法:
1 | SELECT concat('DROP TABLE IF EXISTS ', table_name, ';') |
24、将Double类型的数据保留2位小数
1 | Double a = 2.34566; |
d输出就是2.35, 注意会四舍五入
25、将String转Double,并保留2位小数
1 | String a = “6.145”; |
s输出就是6.15,注意会四舍五入
26、JavaScript修改网页标题
可以在页面加载完时执行下面的代码
1 | document.title ="产品详情" |
27、JavaScript比较时间大小
1 | function CompareDate(d1,d2) |
28、页面定期刷新
1 | setInterval(func,time); |
29、JSP根据参数默认选中radio
1 | <tr> |
关键代码:
1 | <c:if test="${businessModeViewVo.isApproval eq 2}">checked</c:if> |
30、页面元素的禁用与启用
禁用:
1 | $("#id").attr("disabled","true"); |
启用:
1 | $("#id").removeAttr("disabled"); |
注意:$("#id").attr(“disabled”,“false”);不起作用,disabled只能禁用button,对超链接不起作用
31、handlebars 时间格式化
1 | <td>{{dateFormat addTime 'YYYY-MM-DD HH:mm:ss'}}</td> |
32、handlerbars判空,if 和unless
1 | {{#if logisticsId}} |
它是尝试去读取logisticsId属性,如果返回的为undefined、null、""、[]、false任意一个,都会导致最终结果为假。unless和if正好相反,当返回false的时候执行。
33、正则校验所有输入框
1 | $("input[name='unitPrice']").each(function(){ |
34、
1 | var htm = $($('#checkMethodDiv').html()); htm[0].outerHTML;//1 |
1返回的是文本 整个返回的貌似是一个对话框对象
2返回的是document对象
35、禁止textarea拉伸
1 | style="resize:none" |
36、做申请开票的时候,订单列表从表格中删除了,但下次点申请开票时还在。使用空串替换某一个订单号,则是可以实现去除指定字符串功能。
1 | orderIds = orderIds.replace(orderId+","," "); |
37、登陆后跳回原来的页面的问题
思路:点击登录的时候用一个SpringMVC获取到当前url,并把其放到session中,登陆后从session中取出url 清空后跳转
38、jQuery在不知道数组元素下标的时删除数组元素
1 | if($.inArray(templateId.toString(),templateIdSelected)>=0){ |
- $.inArray(),函数用于在数组中查找指定值,并返回它的索引值(如果没有找到,则返回-1),源数组不受影响
- arrayObject.splice(index,howmany,item1,…,itemX)
index: 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany: 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, …, itemX: 可选。向数组添加的新项目。
splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。
39、JSP千分位
1 | <fmt:formatNumber value="${subscriptionMoney }" pattern="#,###.####"/> |
40、数组需要JSON格式化传到后台,不能直接用隐藏域
1 | var data = $('#settlementForm').serializeJson();//不是serialize(); |
1 | url : '/member/purchaseentrustmgr/ajaxpaybond', |
41、Java千分位
1 | DecimalFormat df = new DecimalFormat("#,###.00"); //0用于小数部分,不足补0. |
42、在使用removeAttr()移除了radio的checked属性后,使用attr()重新增加不起作用
1 | $("#invoiceStatus2").prop("checked","checked"); |
即使用prop()可重新配置上该属性, 具有 true 和 false 两个属性的属性,如 checked, selected 或者 disabled 使用prop(),其他的使用 attr()
43、MySQL查询一张表的详细信息(注释)
1 | show full columns from 表名; |
44、查询MySQL创建表的sql
1 | show create table 表名 |
45、textarea开始标签和结束标签中间不要有“回车”。 否则内容不是从头开始的
46、JavaScript科学计数法还原
方法一:
1 | const a = 0.00000001; |
方法二:
1 | function toNonExponential(num) { |
47、textarea没有value属性
1 | <textarea id="summary" name="summary" rows="8" cols="50" "><%= summary %></textarea> |
48、MySQL不等于null语法is not null,MySQL等于null语法is null
49、JavaScript正则匹配
1 | var reg = RegExp(/^[0-9a-zA-Z_]+$/); |
50、jQuery获取选中值
1 | //获取radio checkbox选中值 |
51、MyBatis 的<trim/>标签
prefix 给sql语句拼接的前缀 suffix 给sql语句拼接的后缀
prefixOverrides 去除sql语句前面的关键字或者字符,该关键字或者字符由prefixOverrides属性指定,假设该属性指定为"AND",当sql语句的开头为"AND",trim标签将会去除该"AND"
suffixOverrides 去除sql语句后面的关键字或者字符,该关键字或者字符由suffixOverrides属性指定
52、MySQL的group_concat()函数默认拼接字符串长度是1024,可以手动设置。 做双贸项目分组查了分类下的所有扩展属性,后面分类多了肯定出问题😂
53、jQuery的on()方法不起作用的解决方法。双贸前台商品列表扩展属性监听用到
1 | $(document).on('click','.attrList li',function () { |
这种方法每次执行点击事件 的时候,它会先找到document对象,然后去检测有没有子对象,如果有的话,他就将事件给到子对象,子对象得到该事件之后就开始触发事件后面的方法
54、MyBatis返回List
55、jQuery下拉框默认选中
1 | $("#businessModeAll option[businessId='104']").prop("selected",true); |
其中businessId是自定义属性,正常用value就可以了。attr方法正常取属性值:
1 | $("#businessModeAll option:selected").attr("businessId"); |
56、
1 | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); |
这个月份和分钟一个是大写M一个是小写m,不能混用不能混用不能混用,不然会出现离奇解析错误;H表示小时按24小时制,h不按24小时制