问题症状:
mapper中返回的是List<Map<String,Object>> ,如果查询结果中某个记录的某个字段数据库中值是null,则结果集中就没有这个字段。
百度出有结果:
1、修改mybatis-config.xml文件,我的项目中没有这个文件。
2、修改数据库配置类代码文件,加写代码进去,我的项目中也没有这个代码文件。
3、在application.properties文件中加一行配置:mybatis.configuration.call-setters-on-nulls=true,还好我的项目中有这个配置文件,加上后问题解决
后续问题:另一个项目中,在application.yml中加上这个配置后不管用,没有值的字段还是返回null,经查,改下sessionFactory的配置也可解决,这个项目中使用了Druid做连接池,在其配置文件代码中加个配置代码
@Bean(name = "sqlSessionFactory")
@Primary
public SqlSessionFactory ds1SqlSessionFactory(@Qualifier("dataSource") DataSource dataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setTypeAliasesPackage("com.jiapeng.mainsvr.entity");
//这个配置解决表中某字段值是null时,该字段不在返回列表中的问题
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
configuration.setCallSettersOnNulls(true);
sessionFactory.setConfiguration(configuration);
// sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
// .getResources(DatasourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
以上修改后,返回的列表就包含查询的所有字段了