命令行导出数据库相关表为SQL文件
语法:mysqldump -h[主机所在IP] -u[用户名] -p [要导出的数据库]>[导出的路径//[文件名].sql]
例子:
1 | mysqldump -hlocalhost -uroot -p reward_testdb>E://reward_testdb.sql |
chuenhung.github.io
语法:mysqldump -h[主机所在IP] -u[用户名] -p [要导出的数据库]>[导出的路径//[文件名].sql]
例子:
1 | mysqldump -hlocalhost -uroot -p reward_testdb>E://reward_testdb.sql |
在Java后端开发的时候,我们有时为了隔离变化,经常需要把数据库查询出来的实体转为返回前端的对象,我们不希望写很长的set方法去完成,于是可以考虑使用BeanUtils或BeanCopier工具类。下面通过Awards和AwardsResp类的转换简单说明下用法。
公司项目需要做一个图片预览的功能,并且要展示图片的分辨率(即宽和高),目前的框架没有这个功能,所以得自己写一个方法去读取上传的附件。百度了一下,发现用Java包中的ImageIO就可以得到图片的宽和高。但是,有部分图片会读出null,然后空指针异常。主要代码如下:
1 | File file = new File(filePath); |
作为码农平时搜集一些小知识点个人认为是个不错的习惯,书上说
好记性不如烂笔头
我想即使是以前忽略或者新get的很简单的东西,自己动手记下来不管如何印象也会更深刻。
@RequestBody(required=false),get/post且实体不加无参构造方法都行
1 | E:\Documents\MyIdeaProjects\act\target>netstat -ano |findstr "8888" |
MySQL有JSON字段,MyBatis不支持JSON类型字段的处理,需要自己写Handler
MySQL存有转义字符的JSON会报错,比如"apiParam":"{orderId:"$orderId$"}"
Java连接的8.0版MySQL时需要把mysql-connector-java包换成8.X版本的,把链接换成com.mysql.cj.jdbc.Driver。com.mysql.cj.jdbc.Driver是6.x版本的新功能,需要指定时区serverTimezone和useSSL报com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server错误同样是因为数据库版本太高了而对应的驱动器太低了。相关代码如下:
1 | <!-- mysql驱动 --> |
错误如下:
1 | Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'processEngine': FactoryBean threw exception on object creation; nested exception is org.apache.ibatis.exceptions.PersistenceException: |
原因:因为mysql使用schema标识库名而不是catalog,因此mysql会扫描所有的库来找表,如果其他库中有相同名称的表,activiti就以为找到了,本质上这个表在当前数据库中并不存在。设置nullCatalogMeansCurrent=true,表示mysql默认当前数据库操作,在mysql-connector-java 5.xxx该参数默认为true,在6.xxx以上默认为false,因此需要设置nullCatalogMeansCurrent=true。
解决方法:配置mysql连接时加上:nullCatalogMeansCurrent=true。
代码如下:
1 | <property name="url" value="jdbc:mysql://localhost:3306/activiti_spring?nullCatalogMeansCurrent=true"/> |
错误信息如下:
1 | Caused by: org.apache.cxf.binding.soap.SoapFault: Unexpected wrapper element |
解决方法:
ctrl+home 跳到文件头
ctrl+end 跳到文件尾
ctrl+f1+1 定位到文件位置
ctrl+shift+u 大小写转换
jps -l命令可以查看本地启动的java进程,这是Jdk提供的命令
方法一、把属性文件的server.servlet.context-path=/portal去掉可以正常访问
方法二、
1 | pringfox.documentation.swagger.v2.path=/ |
1 | @PropertySource("classpath:swagger.properties") |
1 | BeanMap map = BeanMap.create(noticePageReq); |
1 | <select id="queryNoticePageList" resultMap="BaseResultMap" parameterType="Map" > |
order by中打印出了字符串,在sql中会语法错误 :
1 | select id, notice_type_id, title, source, description, status, create_time, update_time, create_user, last_update_user, is_show, release_time |
解决方法:
1 | 把上面的#{prop}改为${prop},#{order}改为${order} |
Java实体对象如下:
1 | @Data |
请求接口后:
解决方法1:在类NoticePageReq上添加@Data注解,这个注解会给属性加Set和get方法,需要添加lombok依赖。
解决方法2:在属性title添加@JsonProperty注解。这个注解的主要作用是把传过来的JSON值转换名称,比如下划线转驼峰,然后注入值。
这是泛型方法。在方法中出现了泛型的结构,泛型参数与类的泛型参数无关。泛型方法所属的类是不是泛型类都可以。泛型方法可以声明为static。参考代码如下:
1 | public class ValidatorUtil { |
1 | BigDecimal awardMoney = new BigDecimal(0); |
注意BigDecimal的add()方法返回的是相加后的数据
不过项目中使用BeanMap.create()方法个别地方会报异常,可能是用了热部署工具dev-tools,但是我去掉这个也报错,索性改为了反射方法
参考链接
1 | package edu.hrbeu.platform.modeling.common.util; |
查看当前分支
1 | git branch |
查看所有分支(本地和远程)
1 | git branch -a |
查看所有分支(远程)
1 | git branch -r |
切换分支
1 | git checkout 分支名 |
创建分支
1 | git branch 分支名 |
删除分支
1 | 删除前需要先切换到其他分支,然后执行下面的命令 |
合并master分支代码到dev
1 | 先切换到dev分支然后执行git merge master |
方法一(消息转换器):
1 | /** |
这种方法如果前端传递接口未定义的参数会报JSON参数转换错误:
1 | JSON parse error: Unrecognized field \"a\" (class com.aspirecn.rewardportal.common.entity.PageRequest), not marked as ignorable; nested exception is com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field \"a\" (class com.aspirecn.rewardportal.common.entity.PageRequest), not marked as ignorable (5 known properties: \"rows\", \"data\", \"prop\", \"order\", \"page\"])\n at [Source: (PushbackInputStream); line: 4, column: 9] (through reference chain: com.aspirecn.rewardportal.common.entity.PageRequest[\"a\"]) |
方法二(配置文件 推荐):
1 | #在application.properties文件中配置 |
方法三(在指定的Bean属性中添加注解):
1 | @JsonFormat(timezone = "GMT+8", pattern = "yyyyMMddHHmmss") |
注意如果有用到Fastjson ,注解可能会失效可以用@JSONField注解解决。
1 | @JSONField(format = "yyyy-MM-dd HH:mm:ss") |
方法四(用于解决配置文件不生效的问题)
1 | /** |
方法一:
1 | @SpringBootApplication(scanBasePackages = {"com.xx.xx.xx.A", "com.xx.xx.B"}) |
方法二:
1 | https://blog.csdn.net/lintiyan/article/details/94362640 |
方法三(SpringBoot默认会扫描本模块下面的包):
1 | @SpringBootApplication |
SpringBoot包扫描排除指定类
1 | @ComponentScan(basePackages={"com.aspirecn.core.common","com.aspirecn.kjcgkyg"}, |
前端入参:
1 | { |
后端接收不到,如下图所示:
isBB可以接收到。 接收ifBB、kBB需要在实体类的属性中加上注解。,如下面的代码所示:
1 | @JsonProperty(value = "kBB") |
1、bigint类型转换为datetime类型
1 | select from_unixtime(1164691264437/1000); |
2、datetime类型转换为bigint类型
1 | select UNIX_TIMESTAMP('2021-09-13 11:24:59'); |
1 | @ExcelProperty(value = "研发能力类型名称",index = 6) |
比如要求同一类型成果同一年份同一成果名称不能相同,如下图所示:
1、先去数据库查询类型、年份和成果名拼接字符串列表得到List
1 | SELECT concat(type,'@',which_year,'@',name) |
2、循环读到的Excel行,每读一条拼取一个key去recordList中匹配,然后把该条数据也放到recordList
1 | String productKey = achievementDto.getType()+AchievementConstant.SEPARATOR_A+achievementDto.getWhichYear()+AchievementConstant.SEPARATOR_A+achievementDto.getName(); |
这样把填写和数据库查询的数据都放到了一起,好处是不用再去单独校验用户填写的数据相互之间是否有问题。