龙空技术网

记一次sql能查到数据,mybatis返回null的原因,常常被忽视要注意

it村男主任 84

前言:

如今咱们对“oraclesql去空格函数”都比较关注,大家都需要学习一些“oraclesql去空格函数”的相关资讯。那么小编同时在网摘上汇集了一些对于“oraclesql去空格函数””的相关知识,希望兄弟们能喜欢,同学们快快来学习一下吧!

#记录我的2024#

情况复现

使用plsql能查询到数据

使用mybatis进行简单查询,无法查到数据

public List<TOutputForecastCorrect> find(String type,String beginDate,String endDate){TOutputForecastCorrectExample query = new TOutputForecastCorrectExample();TOutputForecastCorrectExample.Criteria criteria = query.createCriteria();criteria.andTypeEqualTo(type);criteria.andIsValidEqualTo("Y");if(StringUtils.isNotBlank(beginDate)){criteria.andRqGreaterThanOrEqualTo(beginDate);}if(StringUtils.isNotBlank(endDate)){criteria.andRqLessThanOrEqualTo(endDate);}List<TOutputForecastCorrect> tOutputForecastCorrects = tOutputForecastCorrectMapper.selectByExample(query);return tOutputForecastCorrects;}

结果:

JDBC Connection [oracle.jdbc.driver.T4CConnection@7154298e] will not be managed by Spring==> Preparing: select FC_ID, TYPE, NAME, RQ, UPDATE_VALUE, OPERATE_TIME, OPERATOR, IS_VALID from T_OUTPUT_FORECAST_CORRECT WHERE ( TYPE = ? and IS_VALID = ? )==> Parameters: 3(String), Y(String)<== Total: 0
原因

上边的查询有一个条件type=3,数据表中type类型是char(2),当你添加传入参数3时,存入到数据库中的是3 (3后边有一个空格),这时候mybatis按type=3查询是无法查到的,但是plsql中能查到数据,原因是:使用sql查询时会自动去掉数据的空格进行匹配,而mybatis不会自动去掉空格。

解决:将type的类型char(2)改为char(1),这时在查询即可查到数据。

知识点

Oracle和mysql 中char类型是固定长度的类型,当位数不足时,用空格自动补足位数。oracle和mysql使用sql取char的数据的时候(plsql,navicat,数据库等),会自动丢掉后面的空格。mybatis不会自动丢掉后面的空格。

标签: #oraclesql去空格函数 #oracle char去空格