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<b && fabs(a-b)> 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.懒汉模式 双检锁模式
- /**
- * 懒汉模式
- * volatile 防止指令重排序
- */
- 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<List<String>> 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=dev\alpha\beta
27.sleep的另一种写法
TimeUnit.MILLISECONDS.sleep(300);
28.文本框校验先转成Document
- Document document = Jsoup.parse(content);
- // 判空
- ObjectUtil.isEmpty(document.text())
29.判断集合中某值出现的次数
- //Bag继承自Collection接口,定义了一个集合,该集合会记录对象在集合中出现的次数。
- HashBag<String> 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)
1. 数据库全局查询
ctrl +F
2. 全文索引
- MATCH (columnName) AGAINST (‘string’)
- SELECT * FROM `student` WHERE MATCH(`name`) AGAINST('聪')
3. concat()函数
- 将多个字符串连接成一个字符串,如果有任何一个参数为null,则返回值为null
- concat(str1, str2,...)
4. <![CDATA[ ]]> 防止特殊字符被转义
<![CDATA[<=]]>
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') <![CDATA[>=]]> 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是“,”号
<foreach collection="list" item="item" index="index" separator=",">
13. 数据库表中id自增时候普通删除,id会顺序增加,执行truncate table t_name 后数据做删除处理,并且id从1开始自增
truncate table t_name;
14. 返回字符串str,使用在开始位置pos和len个字符的的字符串,newstr取代长字符串
INSERT(str,pos,len,newstr)
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键:显示帮助屏,该屏上有相关的帮助信息;
- 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
- <foreach collection="ids" item="id" open="(" close=")" separator=",">
- #{id}
- </foreach>
- 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
- <foreach collection="ids" item="id" open="(" close=")" separator=",">
- #{id}
- </foreach>
- 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
- </if>