数据库(MySQL):
1、主键类型一致,涉及到外键的字段类型需要参考主键类型,不要这个表主键是int,在外键中就成了varchar。
2、在设计数据库字段类型的时候,注意类型范围,比如说数据库字段类型为Int,那么这个字段存放的数据范围就为int类型范围,超出范围就会报错。
所以int(11),有可能就会报错,int(12)就失去意义了
顺便记录下:
tinyint 的范围是-128~127;
int的范围是-2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字),存储大小为4个字节;
bigint的范围是 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节;
smallint unsigned的范围是 –2^15(2^15表示2的15次幂) 到2^15 – 1,即 –32768 到 32767;
smallint 的范围是 0 到 2^16 – 1,即 0 到 65535,存储的字节是2个字节。
3、DATE_FORMAT(start_date, '%Y-%m-%d') in (:dateStr)
DATE_FORMAT(start_date, '%Y-%m-%d') in (?)
in查询中,如果拼接的是字符串,比如dateStr = "'2018-05-07','2018-05-06','2018-05-05','2018-05-04'";
在Navicat客户端上执行sql没得问题,但是通过jpa查询结果为空。
DATE_FORMAT(start_date, '%Y-%m-%d') in ("'2018-05-07','2018-05-06','2018-05-05','2018-05-04'");很可能原因就是in查询里面的字符串默认添加了双引号“”导出查询为空。
这是一个很隐形的坑,sql单独执行没得问题,但是程序中查询就是为空。
FIND_IN_SET(DATE_FORMAT(start_date, '%Y-%m-%d'),"2018-05-07,2018-05-06,2018-05-05,2018-05-04");能解决这个问题。FIND_IN_SET是mysql的函数。
FIND_IN_SET(DATE_FORMAT(start_date, '%Y-%m-%d'),:dateStr);
注意:FIND_IN_SET的第二个参数:"2018-05-07,2018-05-06,2018-05-05,2018-05-04"或者‘2018-05-07,2018-05-06,2018-05-05,2018-05-04’,而不是'2018-05-07','2018-05-06','2018-05-05','2018-05-04'。
Java开发:
1、String.equals()
equals方法的参数,也要String类型,不是String类型,也不报错,但是返回就是false;
2、对象拷贝:
ConvertUtils.register(new DateConverter(null), java.util.Date.class);
BeanUtils.copyProperties(ompPostQueryListBean,bbsPostRespDto);
copyProperties方法两个对象拷贝,必须保证字段名称和类型一致。不一致也不会发生拷贝。
遇到空的日期类型,装换报错。
还有一个对象拷贝方法:
PropertyUtils.copyProperties(userInfo, userInfoBak);
涉及到对象的深拷贝问题
mybatis操作Oracle数据库遇到一种错误:
error code [17004]; 无效的列类型;
是因为你传入的参数的字段为null对象无法获取对应的jdbcType类型,而报的错误。
需要在SQL语句中的对象加上对应的jdbcType就可以了。
3、函数方法功能一定要简单,单一。
一个函数只做一件事情。写好注释,方便其他人调用。别一个函数界限不明确。谁都可以用,谁都不可用。那就尴尬了。
4、JSONObject对象,如果对象是null,转为json就是{}。所以对于json对象不能用 jsonobject != null进行判断。因为{}!=null永远为ture。
5、Java中的简单浮点数类型float和double不能够进行运算。https://www.cnblogs.com/bad-guy/p/7698845.html
String str = "10.20";
Double d = Double.valueOf(str);
d = d* 100;
System.out.println(d); 1019.9999999999999