关于springboot:使用myabatis-postgreSql-中遇到的问题

1次阅读

共计 1237 个字符,预计需要花费 4 分钟才能阅读完成。

问题一:字段名不存在

执行如下语句的时候呈现了问题:

Test entity = new Test();
entity.setName(new RandomString().nextString());
entity.setFatherTestId(new RandomString().nextString());

Integer insNum = testMapper.insert(entity);

这里使用了 mapper 自带的 insert 办法向数据库中插入数据。

在用 mapper 进行插入的时候后,报了这样的谬误:字段名不存在。

然而去数据表中查看,实际上是有 fatherId 这个字段的

就纳闷 为什么后盾会找不到这个字段


并认真看红色的的报错,后盾说 fatherid 这个字段找不到。
这里我发现了端倪,数据库中表定义的是 fatherId, i 这个字母是大写的。

猜想是因为 数据库字段大小写的问题

之后去谷歌之后找到了答案:

起因:在于 PostgreSQL 对表名、字段名都是辨别大小写的。在执行 SQL 时,那么不论你的 SQL 中字段是大写还是小写,最初都会默认转为小写去执行。

解决:

1. 数据库字段名改为小写。或者用下划线_宰割。
起初改为下划线后运行失常

2. 写 sql 语句的时候,对表名或者字段名加上双引号

定义 SQL 的时候,对表名及字段名加上双引号,能够避免大写字段被转为小写去执行。

因为在 PGSQL 中,默认对 SQL 语句进行抹去双引号和大写转小写的其中一个 且抹去双引号优先级比拟高,因而当大写字段被加上双引号,只进行了抹去双引号的解决而不会再被转为小写了。

例如这样,加上双引号。


最初因为 我这里应用的是 mapper 自带的 insert 函数来进行数据插入 ,并没有本人写 sql 语句。
所以最初采纳了第一种形式解决。

问题二:char(32)类型字段,查问进去的数据带有空格

Integer insNum = testMapper.insert(entity);
Assert.isTrue(insNum.equals(1), "insert success");

String id = entity.getId();
Test getEntity = testMapper.selectById(id);;
Assert.isTrue(getEntity.getName().equals(entity.getName()), "name not equal");

在后盾单元测试的时候,进行了断言:插入的数据和查问进去的数据雷同。

也就是说,将一条数据插入到数据库中,再将其查问进去,判断这两个数据的属性都雷同。

然而 单元测试始终没通过

在代码中打断点测试中发现,发现从数据库中 查问进去的数据都带有空格。如下图。

猜想是因为 postgresql 在保留的时候会,主动将数据长度用空格补充至 32 位。

后果用 testMapper 自带的 selectById 办法查问出数据的时候,就会带有空格。

如果是这样的话,用 mapper 查问数据进去之后,还须要用 trim()函数将空格一一去除。

正文完
 0