- 链接: Java 高级 .
- 链接: Java 日常工具类 .
- 链接: 尚硅谷视频redis笔记 (github 多种笔记).
- 链接: Java 全栈知识体系.
- 链接: excel生成模板
1.查看容器中有没有某个id,有为true
.contains(long id)
2.生成随机数值
Math.random
3.把a对象数据放进b对象里 字段名称要相同
BeanUtils.copyProperties(实体类 a,实体类 b)
4.集合类判空
CollectionUtils.isNotEmpty(集合)
5.只能用在单数据源回滚
@Transactional (rollbackFor = Exception.class)
6.多数据源 指定数据源
@DS()
7.可变参数 A...a(是个数组)
ArrayUtils.isNotEmpty(a)?a[0]:new A();
8.截取取字符串
StringUtils.abbreviate(" ",15) 取前15位
StringUtils.abbreviate(" ",5,15) 取,5-15位
9.Date 增加一天
DateUtils.addDays(date, 1);
10.获取固定格式时间DATE
public Date getNowTime() {
Date date = new Date();
Date nowDate = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String s = sdf.format(date);
try {
nowDate = sdf.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
return nowDate;
}
11.lambda表达式所在的作用域生命的变量不可以第二次赋值
12. jsonObject
// string 转 jsonObject
JsonObject.parseObject("string")
// 拿到key下的json数组(jo是jsonObject)
JsonArray as = jo.getJsonArray("key")
// 拿到as下的第二个数组
JsonArray as = as.getJsonArray(2)
// json转string
string properties = a.getJsonObject("jo").toString;
// json转实体类
Entity e = JSON.parseObject(jo, Entity.class);
14. 向前端传的字段名与数据库字段名无法一致。例:数据库字段‘lBoundary’,前端需要‘lboundary’
在get,set方法上使用注解@JsonProperty(‘lboundary’)
15.浮点数比较大小要比较精度(1e-6等于0.000001)
// 18.1 比较相等时,精度要<=1e-6 fabs(a-b)<= 1e-6 // 18.2 比较大于时 if(a>b && fabs(a-b)> 1e-6) // 18.3 比较小于时 if(a 1e-6)
16.string拼接“”符号时,不能写死,因为不同系统分隔符不同,要使用File.separator替换
File.separator
17.为某个值赋最小值
Double.NEGATIVE_INFINITY;
18.@Autowired 循环依赖时使用懒加载@Lazy
19.定时任务
@Scheduled(cron = “000**?”) 方法......
20.Math.max(a,b) 比较出a,b中的max,比较float性能差
21.指定字符删除(替换掉_)
str.replaceAll("_","")
22.懒汉模式 双检锁模式
private static volatile AsyncManager instance = null;
public static synchronized AsyncManager getInstance() {
//双检锁模式
if(null == instance){
synchronized (AsyncManager.class) {
if(null == instance) {
instance = new AsyncManager();
}
}
}
return instance;
}
23.用到.in(ids),或者sql中有in(ids)时,要对ids做判空处理
24.map.putIfAbsent:map的此方法是先检查map中是否有key,没有时候再添加
25.将大list转换成小list
List> minList = Lists.partition(maxList, 1000);
26.spring的@value注解是spring初始化bean时候执行的。
如果用@value对static修饰的属性复制(static先于spring之前加载) 做法:先封装一个bean来初始化相关的配置,然后利用工具类在静态代码块中获取到这个bean对象,用这个bean对象来初始化工具类中的相关属性 //https://www.jianshu.com/p/3daeb8629a56 // https://blog.csdn.net/yrsg666/article/details/111640131 @value使用时默认加载application.yml中的文件,可以再指定别的文件spring.porfiles.active=devalphabeta
27.sleep的另一种写法
TimeUnit.MILLISECONDS.sleep(300);
28.文本框校验先转成Document
Document document = Jsoup.parse(content); // 判空 ObjectUtil.isEmpty(document.text())
29.判断集合中某值出现的次数
//Bag继承自Collection接口,定义了一个集合,该集合会记录对象在集合中出现的次数。 HashBag二、postgre数据bagNo = new HashBag<>("1")
1. 4326转3857坐标系之前先要配置默认坐标系
select update Geometry SRID(“表名”,‘geom’,4326)
2. 查询坐标系
select ST_SRID(geom) from ”表名“ limit 1
3. 快速创建两个点
ST_MakePoint(x,y)
4. 更新坐标系
ST_setSrid(XX,4326)
5. 坐标系之间转换
ST_Transform(4326,3857)三、mysql数据库
1. 数据库全局查询
ctrl +F
2. 全文索引
MATCH (columnName) AGAINST (‘string’)
SELECt * FROM `student` WHERe MATCH(`name`) AGAINST('聪')
3. concat()函数
将多个字符串连接成一个字符串,如果有任何一个参数为null,则返回值为null concat(str1, str2,...)
4. 防止特殊字符被转义
5. 根据UNIQUE索引或者primary key(主键)是否出现重复,判断执行update语句或者insert语句
INSERT INTO user(id,name) VALUES(8,'c') ON DUPLICATE KEY UPDATE name="B";
6. mybatis-plus中IserviceImpl中的saveOrUpdateBetch()方法也可以批量实现存在 id 时候覆盖,不存在时候添加
7. 校验数据库某列字段是否唯一,使用limit 1可以避免全表查询
limit 1
8. 查询时候用到or时候使用union替换,因为or会使索引失效
9. 如果某个字段为null就从别处拿取字段值
CASE WHEN tm.createTime IS NULL THEN ( SELECT create_time FROM t_merchant_information t WHERe t.id = tm.id ) ELSE tm.createTime END as createTime
10. sql中当前时间与数据库数据比较
where date_format(now(), '%Y%m%d%H%i%S') =]]> concat(date_format(t1.begin_date, '%Y%m%d'), t1.begin_time)
11. 数据库一对多,并且要展示某个字段时候可以用GROUP_CONCAT方法拼接字段。
(select GROUP_CONCAt(sys_name separator',') from t_news_module where news_id = tn.news_id) SELECt tn.*, (select GROUP_CONCAt(sys_name separator',') from t_news_module where news_id = tn.news_id) as sys_name FROM `t_news_notifications` tn where tn.del_flag = 2
12. 使用foreach时要记得separator是“,”号
13. 数据库表中id自增时候普通删除,id会顺序增加,执行truncate table t_name 后数据做删除处理,并且id从1开始自增
truncate table t_name;
14. 返回字符串str,使用在开始位置pos和len个字符的的字符串,newstr取代长字符串
INSERT(str,pos,len,newstr)四、idea功能
1. 快速创建静态常量
ctrl+alt+c
2. 快速大小写转换
ctrl+shift+u
3. 中英文翻译
ctrl+shift+o
4. 快速给实体类添加get,set方法
alt+ent(在实体类上添加)
5. 格式化代码
ctrl+alt+t
6. idea项目中没有iml文件
执行mvn idea:module
1.linux 查看日志常用命令
tail: -n 是显示行号;相当于nl命令;例子如下: tail -100f test.log 实时监控100行日志 tail -n 10 test.log 查询日志尾部最后10行的日志; tail -n +10 test.log 查询10行之后的所有日志; cat -n test.log |grep "debug" 查询关键字的日志
2.按行号查看---过滤出关键字附近的日志
1)cat -n test.log |grep "debug" 得到关键日志的行号 2)cat -n test.log |tail -n +92|head -n 20 选择关键字所在的中间一行. 然后查看这个关键字前10行和后10行的日志: tail -n +92表示查询92行之后的日志 head -n 20 则表示在前面的查询结果里再查前20条记录
cat app.log | grep -C 5 '关键字' (显示日志里匹配字串那行以及前后5行) cat app.log | grep -B 5 '关键字' (显示匹配字串及前5行) cat app.log | grep -A 5 '关键字' (显示匹配字串及后5行)
3.根据日期查询日志
sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log 特别说明:上面的两个日期必须是日志中打印出来的日志,否则无效; 先 grep '2014-12-17 16:17:20' test.log 来确定日志中是否有该 时间点
4.进入编辑查找:vi(vim)
1、进入vim编辑模式:vi app.log 2、输入“/关键字”,按enter键查找 3、查找下一个,按“n”即可( n 查找上一处错误日志 N 查找下一处错误日志) 4、ctrl+f: 下翻一屏。 ctrl+b: 上翻一屏。 ctrl+d: 下翻半屏。 ctrl+u: 上翻半屏。 ctrl+e: 向下滚动一行。 ctrl+y: 向上滚动一行。 5、ctrl+o回到搜索的地方 :w - 保存文件,不退出 vim :w file -将修改另外保存到 file 中,不退出 vim :w! -强制保存,不退出 vim :wq -保存文件,退出 vim :wq! -强制保存文件,退出 vim :q -不保存文件,退出 vim :q! -不保存文件,强制退出 vim :e! -放弃所有修改,从上次保存文件开始再编辑 其他情况: /关键字 注:正向查找,按n键把光标移动到下一个符合条件的地方 ?关键字 注:反向查找,按shift+n 键,把光标移动到下一个符合条件的
5.查看所有关键字相关的日志(more 和vi 类似)
more app.log 默认打开所有的,从前往后 常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令) 1、more app.log | grep '关键字' 2、按Space键:显示文本的下一屏内容 3、按B键:显示上一屏内容; 4、按H键:显示帮助屏,该屏上有相关的帮助信息;六、SQL
SELECt
tm.merchant_no AS merchantNo,
td.NAME AS deptName,
tm.NAME AS merchantName,
tba.appid AS appId,
CASE
WHEN tm.createTime IS NULL THEN
( SELECT create_time FROM t_merchant_information t WHERe t.id = tm.id )
ELSE tm.createTime
END as createTime
FROM
(
(
SELECt
tmi.id,
tmi.merchant_no,
tf.update_time as createTime,
tmi.NAME,
tmi.dept_id
FROM
t_merchant_information_pass tmi
LEFT JOIN t_merchant_information_flow tf ON tf.merchant_no = tmi.merchant_no
AND tf.flow_status = 3
WHERe
tmi.del_flag = 1
AND tmi.dept_id != 1
AND tmi.id IN
#{id}
GROUP BY
tmi.merchant_no
) UNIOn
(
SELECt
tmi.id,
tmi.merchant_no,
tmi.create_time as createTime,
tmi.NAME,
tmi.dept_id
FROM
t_merchant_information tmi
LEFT JOIN t_merchant_information_flow tf ON tf.merchant_no = tmi.merchant_no
WHERe
tmi.del_flag = 1
AND tmi.dept_id = 1
AND tmi.id IN
#{id}
GROUP BY
tmi.merchant_no
)
) tm
LEFT JOIN t_bank_appid tba ON tba.organ_no = tm.dept_id
AND tba.is_delete = 1
AND tba.STATUS = 1
AND tba.organ_no != 1
LEFT JOIN t_dept td ON td.id = tm.dept_id
order by tm.id desc



