Java程序猿搬砖笔记(十二)
文章目录
- @PostConstruct注解
- Mybatis的mapper-locations配置
- @JsonFormat实现原理
- IDEA String Manipulation插件使用及设置快捷键
- 在Windows中测试服务器端口是否开放
- Centos开放端口
- Nginx常用配置详解
- Nginx里面的路径定位关键词root、alias
- zuul里面的prefix 和 strip-prefix学习
- 解决Mybatis嵌套的结果集不能被安全地转为自定义ResultHandler
- Mybatis中文文档
- TortoiseGit+TortoiseGit中文语言包详细安装使用教程(windows版)
- Java文件类型校验之Apache Tika
- Jackson解析器接收JSON实体,需要这个实体有无参构造方法,否则会报错
- Excel中数字变成E+的原因分析及两种解决方法
- Excel快速对当前列下面的空单元格填充
- MySQL统计每分钟的记录数
- SpringBoot项目中某些Maven依赖可以不加版本号的原因
- 在线SQL转Java实体工具
- EasyExcel模板填充
@PostConstruct注解
示例代码:
@Configuration
@ComponentScan({"com.aspirecn.external.reward"})
@MapperScan("com.aspirecn.external.reward.mapper")
@Slf4j
public class ExternalRewardConfiguration {
@PostConstruct
private void init() {
log.info("自动装配ExternalRewardConfiguration");
}
}
参考链接
Mybatis的mapper-locations配置
- 当mapper接口和mapper接口对应的配置文件在命名上相同、所在的路径相同时,则mapper-locations可以不用配置,配置也不会生效。
- 当mapper接口和mapper接口对应的配置文件在命名上不相同、或者所在的路径不相同时,需要配置mapper-locations才能实现接口的绑定
YML文件配置参考:
mybatis:
mapper-locations: classpath:mapper/*Mapper.xml,classpath*:com/reward/promotion/mapper/*.xml
mapper和xml对应不上会报错:
Invalid bound statement (not found): com.reward.promotion.mapper.CompanyRecordMapper.queryRecordList
@JsonFormat实现原理
参考链接
IDEA String Manipulation插件使用及设置快捷键
设置步骤演示:
1、快捷键"ALT+M" -> Switch Case -> Open Settings -> 增加"小写下划线转驼峰"操作
2、打开IDEA设置 -> 点击Keymap -> 搜索"小写下划线转驼峰" -> 将快捷键设置为"ALT+SHIFT+U"
注意:版本9以后才实现了"小写下划线snake_case"功能
参考链接
在Windows中测试服务器端口是否开放
命令语法:telnet 服务器id 服务器端口
示例命令:telnet 10.12.7.181 9098
Centos开放端口
1、开启防火墙
systemctl start firewalld
2、开放某个端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
其中zone表示作用域,参数permanent表示永久生效
3、重启防火墙
firewall-cmd --reload
Nginx常用配置详解
参考链接
Nginx里面的路径定位关键词root、alias
1、root:设置请求的根目录。是最上层目录的意思。
处理结果为:root路径+location路径。
2、alias:用来更改location的路径。是目录别名的意思。
处理结果为:使用alias路径替换location路径。
3、如果location路径是以/结尾,则alias也必须是以/结尾,root没有要求。
参考链接
zuul里面的prefix 和 strip-prefix学习
1、strip-prefix
true 移除前缀 false 不移除(增加)前缀
2、strip-prefix可用于全局配置和zuul.prefix结合使用
strip-prefix可用于路由配置和zuul.routes.routeName.path结合使用
从2.8路由前缀开始看就好,前面的例子举得不太好。
参考链接
解决Mybatis嵌套的结果集不能被安全地转为自定义ResultHandler
报错信息:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: Mapped Statements with nested result mappings cannot be safely used with a custom ResultHandler. Use safeResultHandlerEnabled=false setting to bypass this check.
意思:不允许自定义ResultHand处理器
解决方法:
# 增加配置:safe-result-handler-enabled: false
mybatis:
mapper-locations: classpath:mapper/*Mapper.xml
configuration:
call-setters-on-nulls: true
safe-result-handler-enabled: false
参考链接
Mybatis中文文档
参考链接
TortoiseGit+TortoiseGit中文语言包详细安装使用教程(windows版)
官方下载链接、详细安装使用教程
Java文件类型校验之Apache Tika
Java文件类型校验之Apache Tika、Java实现流和文件的转换 将InoutStream转为File输出到磁盘
Jackson解析器接收JSON实体,需要这个实体有无参构造方法,否则会报错
奖励平台动态登录时,LoginParam没有无参构造方法(@NoArgsConstructor)会报org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class com…entity错误
Excel中数字变成E+的原因分析及两种解决方法
原因:
Excel中默认数字在超过11位后,就用科学计数法的显示方式。
解决方法:
方法一:单元格格式设置为数值,小数位数改为0
这种方式适用于数据库导出Excel后,某些字段自动转为了科学计数法的情况。
保存时会提示格式不兼容,本质是文件的实际是TXT格式,需要另存为xlsx,设置的格式才有效果
方法二: 自定义单元格格式,类型设置为0
这种方法适用输入的数字长度超过11位但是不超过15位,超过15位后的数字会自动变为0。
方法三:单元格格式设置为文本
这种方式数字超过15位也可以正常显示,但是做数值运算会有问题。
参考链接
Excel快速对当前列下面的空单元格填充
方法一:双击单元格右下角也可以实现快速填充,填充的范围为遇到非空值。
效果如下:
该方式适合整列都为空的情况。
方法二:ctrl+g快捷键实现快速填充
步骤:选中当前列 -> ctrl+g快捷键,定位 -> 点击空值 -> 输入要填充的值 -> ctrl+回车
效果如下:
该方式功能更强大,支持筛选后的部分空值填充。
参考链接
方法三:复制单个单元格,然后拖动进度条到最后填充
步骤:
筛选出空白单元格 -> 输入要填充的值 -> ctrl+c,复制 -> 拖动进度条到最后 -> ctrl+v粘贴
效果如下:
MySQL统计每分钟的记录数
原理:
利用unix_timestamp和floor函数,把秒转换成整数(取整),然后对这个整数进行分组取数量。
核心代码:
floor(unix_timestamp(record.create_time) / 60)
参考代码:
-- 按分钟统计投票次数
SELECT
t.create_time '投票时间',count(t.id) '投票次数'
FROM
(
SELECT
record.id,
record.create_time,
floor(
UNIX_TIMESTAMP(record.create_time) / 60
) create_timestamp
FROM
`t_vote_user` record
) AS t
group BY t.create_timestamp
ORDER BY t.create_time;
SpringBoot项目中某些Maven依赖可以不加版本号的原因
因为spring-boot-dependencies是spring-boot-starter-parent的父依赖,spring-boot-dependencies-XXX.pom中的dependencyManagement有常用依赖包的默认版本号,有助于统一版本号。
所以当在Springboot项目中引入了spring-boot-starter-parent或spring-boot-dependencies,则可以不用引入依赖包版本号。
如果非要想自己填写版本号也是可以的,这样会覆盖官方版本号(不建议随便修改依赖包版本号,免得版本号不兼容)。
参考链接
在线SQL转Java实体工具
参考链接
EasyExcel模板填充
通用导出方法:
public class ExportExcelUtil<T> {
/**
* 给模板填充数据导出浏览器
*
* @param: list
* @param: path
* @param: fileName
* @return void
* @author liquanhong
* @date 2023/3/9/
*/
public void exportWithTemplate(List<T> list, String path, String fileName, HttpServletResponse response) throws Exception{
// 1、加载导入模板
Resource resource = new ClassPathResource(path);
// 2、设置浏览器响应信息
String newFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
dealResponse(response,newFileName);
// 3、开始导出
ExcelWriter excelWriter = EasyExcel
.write(response.getOutputStream())
.withTemplate(resource.getInputStream())
.build();
WriteSheet writeSheet = EasyExcel.writerSheet(0).build();
excelWriter.write(list, writeSheet);
excelWriter.finish();
}
}
参考链接、参考链接、官方文档