概述:用来记录平时碰到的问题。
1.导包错误
问题:一直报找不到写了SQL语句的.xml文件,明明文件都放在了正确的地方。
原因:导包错误,包括注解、继承类的导包等。因为Eclipse的自动联想功能,很多时候就是直接回车,没有注意导入包的路径,再加上IDE里面默认把import都收了起来,所以浪费了些时间。
2.mybatis的resultMap中的jdbcType的值要大写
问题:好像是tomcat启动阶段就报错了
原因:因为mysql默认是大小写不敏感,所以我一开始想当然的以为jdbcType也大小写不敏感,然后就被教做人了。
延伸:MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:
a.数据库名与表名是严格区分大小写的;
b.表的别名是严格区分大小写的;
c.列名与列的别名在所有的情况下均是忽略大小写的;
d.字段内容默认情况下是大小写不敏感的。
3.用Navicat从Excel导入数据时的问题
问题:从Excel导入的数据中,有一列数据是由数字+字母组成的,导入数据库中以后,除字母E以外的字母都被剔除了
可能的原因:一开始建表的时候,该字段被我设置成了int类型,后来重新建表,还是一样的问题,后来不小心把navicat关了,再打开导入数据,问题解决。所以推测原因是navicat出了点小问题(平时我的navicat开得久了也会报内存地址xxxx无法访问的警告),虽然后来改了数据库字段,但是导入的时候,那一列的数据还是被当成了int来导入,字母E应该是被当作了科学记数法的E才得以保留。重启大法好。
4.用fastjson将List解析成String时,List的值变成了地址
问题:同一个List中的两个元素,元素中某个List变量是由同一个List赋值的,导致解析出的字符串的值是形如"$ref.xxx"的形式而不是具体的值。
原因:fastjson的引用检测导致的,重复引用和循环引用都会导致这个问题,可以关掉:
JSON.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect);
5.\0引发的惨案
问题:工具配置某个解决方案以后,输出excel报告内容为空
分析:一开始配置了该解决方案,也并不是所有的情况都能复现问题,通过多次配置,发现问题出在其中一个服务器上,当配置该服务器时,excel报告就无法输出。
excel报告生成的流程是这样的:
页面上手动触发按钮 --> 报告模块通过rest接口从其它模块获取数据,并入库到本模块的数据库 --> 根据xml模板上的sql语句查询数据库,并将查出的数据填充到对应的标签中,得到填充了数据的xml文件 --> 根据上一步得到的xml文件将数据填充到excel表中,得到excel报告
首先是查看提供给报告模块的rest接口是否有数据,看起来一切正常;然后看报告模块入库是否成功,结果数据库数据一切正常;再看填充的xml文件是否有数据,也是一切正常;最后生成excel报告内容为空。
看来问题出在最后一步,重新检查xml文件时,发现有一个字符"�",根据经验,这应该是一个转义后的字符(类似于>、<),百度后发现"&#x;"是表示ascii,其中"x"便是ascii码x表示的字符,在生成xml之后,生成excel文件之前,手动将"�"改为"0",excel文件内容正常生成,对应内容也的确多了一个数字"0",说明"�"果然是ascii字符(NUL)
随后就是找原因了,很快定位了到一张系统表,找到sql语句,发现在插入内容时,插入的内容多了"\0",over。
6.Mybatis的返回结果实体类中有元素的值为List<String>,如何写resultMap
<collection property="names" ofType="java.lang.String">
<constructor>
<arg column="name"/>
</constructor>
</collection>
7.mybatis注释
mybatis配置sql的xml文件中,sql文件不能有注释"-- ",有注释会报错"sql injection violation,comment not allow"
8.用fastjson解析Map<String, Object>格式的json字符串
TreeMap<MyKeyObject, MyValueObject> record = JSON.parseObject(myJsonString, new TypeReference<TreeMap<MyKeyObject, MyValueObject>>() {
});