开发中遇到的错

mysql 和 mybatis 版本不兼容

异常信息为:java.sql.SQLException: Unknown system variable ‘query_cache_size’
是因为mysql版本过低,和mybatis版本不兼容,所以报错
只需要更改pom文件里面的mysql依赖的版本号就可以了

springboot工程没有使用注入datasource

当springboot工程里面没有使用数据库的东西的时候,我们没有配置datasource的信息的时候,运行时会报错,说
sqlsessionfactory是需要的,所以我们要在运行入口类添加注解

1
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

在springboot的datasource配置问题

在datasource里面的URL后面添加了 zeroDateTimeBehavior=convertToNull 参数,结果运行报错
java.sql.SQLException: The connection property ‘zeroDateTimeBehavior’ acceptable values are: ‘CONVERT_TO_NULL’, ‘EXCEPTION’ or ‘ROUND’. The value ‘convertToNull’ is not acceptable.
报错信息为添加参数无效,将 zeroDateTimeBehavior=convertToNull 参数去掉就可以了。

idea中springboot的断点调试

打开Run/Debug Configurations,选择要调试的服务,然后在虚拟机参数设置(VM options):

1
-Xms512m -Xmx512m -Xmn164m -XX:MaxPermSize=250m -XX:ReservedCodeCacheSize=64m -Dserver.port=端口号 -ea

然后Working directory选项中选择

1
$MODULE_WORKING_DIR$

然后点击debug运行就可以了

mysql对字符串排序

在对字符串排序是,我们只需要

1
2
3
SELECT * FROM 表名  ORDER BY 字段名+0;

SELECT * FROM 表名 ORDER BY 字段名*1;

这样我们就将字符串变为了ascII码,mysql就可以对此进行排序

项目jdk版本和本地版本不一致

在开发的时候报错了

1
error:java:不支持发行版本5

我们在 IDEA—>File—>project structure 里面检查一下project和modules里面的jdk版本和本地的是否一致,不一致就改成一样的。
修改完毕之后到 Settings–>Bulid, Execution,Deployment–>java Compiler,Target bytecode version设为本地Java版本。

jdbc链接不到数据库

1
mysql Caused by: java.sql.SQLSyntaxErrorException: Unknown database 'sys'

首先检查这个数据库是否存在,jdbcurl填写是否正确,mysql是否启动,然后检查服务看3306是否冲突。
我的是禅道占用了3306端口,所以连接不上。

string.substring()方法截取字符串

在使用string.substring()截取字符串的时候,参数名是beginIndex和endIndex,我以为就是开始的位置和结束的位置,以为是将该位置也算上,
其实在使用后,发现打印的字符串不对,没有将最后一个位置的字符算上,但是算上了开始的位置。

前端传递时间格式参数报错

1
Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDateTime' for property 'endDate'

出现这个问题,原因不知道,但是解决方案是在实体类上面,添加注解,必须连个都要。光要上面那个格式不对,光要下面那个还是报错

1
2
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

使用mybatis-plus时,插入异常

1
2
SQL: INSERT INTO eval_exam ( create_user_id) VALUES (?)
### Cause: java.sql.SQLException: Field 'id' doesn't have a default value

mybatis-plus的方法会自动给我们生成简单的sql语句,但是我们在实体类里面的id上面加了TableId的注解的话,是不会自动给我们在sql语句
里面添加字段的,默认是自增的,但是数据库不是自增的字段,所以我们去掉注解或者是改数据库字段,设置成自增的就可以了。

mybatis-plus 关键字冲突

在使用mybatis-plus自动生产sql语句时,如果条件里面或者表的映射类里面有类似于 status和user等字段时,会和mysql里面的关键子冲突,
会报出找不到这个字段的异常,我们需要在表的映射类的字段的映射注解里面加 符号就可以,或者是在条件里用 符号包裹字段就行。

mybatis的xml文件和注解冲突

使用mybatis的时候有两种写自定义sql语句的方法,一个是写映射xml文件,一种是直接在接口方法上加注解,但是我在写的时候没注意,两个都
写了,那么mybatis会自动加载xml文件的sql语句,不会加载注解的sql语句。

筛选字段过慢

1
2
select *,(case when INSTR(grade_name,'高') then 1 
when INSTR(grade_name,'初') then 2 else 0 end ) as code from eval_exam

idea打开工程问题

在idea中直接选择打开工程文件,如果打开的文件当前子目录下没有pom文件,那么打开后的工程是不会被解析成maven工程文件,尽管里面的子文件有pom
文件,那么也不会解析。

文件上传名字错误

在文件上传的时候使用了以下方式来获得上传文件的名字

1
file.getOriginalFilename();

但是我们使用这种方式获得的名字在IE浏览器里,获得的是完整的路径名字+文件名。
所以我们需要判断上传的文件名是否包含路径。修改代码如下:

1
2
3
4
5
6
7
8
String filename = file.getOriginalFilename();
int unixSep = filename.lastIndexOf('/');
int winSep = filename.lastIndexOf('\\');
int pos = (winSep > unixSep ? winSep : unixSep);
if (pos != -1) {
filename = filename.substring(pos + 1);
}
File filepath = new File(destination, filename);

使用postman不当

我在使用postman请求时,发现只有get和delete能获得数据,但是put和post就不可以了,我在请求了组长的帮助下,才发现
只有put和post的参数要加在body里,不能直接写params,否则会报400,请求不到路径。

报错信息:Element ‘dependency’ cannot have character [children], because the type’s content type is element-on

这是因为我在网站上面复制的依赖地址,所以粘贴的时候没注意,可能会有特殊字符,或者是少写多写了,或者是有空格,我将空格删除自己输入空格就好了。

MongoTemplate使用报空指针异常

刚开始使用的时候我只是简单的写了这个

1
private MongoTemplate mongoTemplate

以为是静态类,但是排查发现是这个报了,我就知道没有实例化,我使用了自动注入后发现还是没有实例化,我想了很久才知道,我写在了工具类里面,我的工具类是一个普通类,没有自动注入,所以里面的对象不会自动注入,如果想要注入,只需要在普通类上面加@component注解就可以了。
还有MongoTemplate普通实例化的方式有点复杂,如以下

1
2
3
4
5
6
7
MongoClientOptions.Builder mongoBuilder = new MongoClientOptions.Builder();
mongoBuilder.maxWaitTime(1000*60*3);//可有可无
mongoBuilder.connectTimeout(60*1000*3);//可有可无
mongoBuilder.minConnectionsPerHost(1);//可有可无
MongoClientURI mongoClientURI = new MongoClientURI("mongodb://root:root@demo.com:27017/logs?authSource=admin",mongoBuilder);
SimpleMongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClientURI);
MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory);

sql语句中模糊匹配和or的使用

在sql语句中,使用 like 模糊匹配的时候,我在一组or条件组里面使用了 模糊匹配,发现查询后的数据只有符合第一个条件的数据,就好像or条件后面都没有效果一样。

1
select * from xxx where (xx like "x%" or xx like "x%" or xx like "x%") and xx = ? and xx = ?

后面测试了一下,发现使用双引号好像会使后面的or条件失效,只有单引号才会有用。