编写项目时需要使用JdbcTemplate,通过表名获取表结构,运行代码报错
java.lang.NullPointerException: null
Debug后发现JdbcTemplate返回的是null。
出错部分代码:
@Repository
public class FieldDao {
@Autowired
JdbcTemplate jdbcTemplate;
public List<FieldInfo> getField(){
TableHelper tablehelper = new TableHelper();
List<FieldInfo> tab = tablehelper.GetFieldInfoList("11");
return tab;
}
}
TableHelper .java
@Component
public class TableHelper {
@Autowired
JdbcTemplate jdbcTemplate;
/**
* 业务逻辑:表的字段是通过特定ID在'字段管理表'中获取的,
* FieldInfo是判断获取到的字段类型后转换为一个统一的变量,也就是convertDBTypeToFieldType()所做的操作
* @return
*/
public List<FieldInfo> GetFieldInfoList(int pid) {
StringBuilder sql = new StringBuilder(
"select f_field_name_cn fieldname,f_field_name_en fieldcode,f_field_type datatype from field_parameter where f_pid = " + pid);
RowMapper<FieldInfo> rowMapper = new BeanPropertyRowMapper<>(FieldInfo.class);
List<FieldInfo> fieldList = jdbcTemplate.query(sql.toString(), rowMapper); //从数据库中查询出的数据类型需要转换
for (int i = 0; i < fieldList.size(); i++) {
fieldList.get(i).convertDBTypeToFieldType();
}
return fieldList;
}
}
【出错原因】
在执行tablehelper.GetFieldInfoList(“11”);时返回的结果是null,TableHelper内没有错误,说明这个帮助类在引用时出现问题
【最终解决方式】
将引用的类改为自动驻入
由new的形式改为@AutoWired
改为
注意pom.xml中有如下配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
以及引用的类带有@Component注解