MySQL语句在数据库中执行能检索出数据,但是在代码返回中是null值如何解决

一个实际开发中的例子:spring framework框架中的jdbc操作类库jdbctemplate

//JdbcTemplate:这是 Spring Framework 提供的核心类之一,用于执行 SQL 查询和操作数据库。
//它提供了一系列便捷的方法,包括执行查询、更新操作、参数绑定等。
private JdbcTemplate jdbcTemplate;

//这个方法使用了 Spring Framework 的 JdbcTemplate,通过构建 SQL 查询语句和参数,
//调用 JdbcTemplate 的查询方法,并使用行映射器将查询结果映射到 tempList 对象的列表中。
public List<tempModel> searchBrandCdByPrimeNo(int tempNum, String tempStr){
		//SqlCommand:这是一个自定义的命令对象,用于封装 SQL 查询语句和参数。
		SqlCommand command = new SqlCommand();
		//StringBuilder:用于构建 SQL 查询语句的可变字符串。
	    StringBuilder sql = new StringBuilder();
	    //List:用于存储查询参数的列表。
	    List<Object> params = new ArrayList<Object>();
	    sql.append("SELECT MIN(temp_table.brand_cd)"
	        + " from temp_table "
	        + " where temp_table.temp_colum_num = ? AND temp_table.temp_colum_str = ? ");
	     params.add(tempNum);
	     params.add(tempStr);

	     command.setParameters(params.toArray(new Object[0]));
	     command.setText(sql.toString());
	     //BeanPropertyRowMapper:这是一个用于将查询结果映射到对象的行映射器。
	     //它通过反射和属性名匹配的方式,将查询结果的列映射到 tempModel对象的属性上。
	     List<tempModel> tempList = jdbcTemplate.query(command.getText(),command.getParameters(),
	         new BeanPropertyRowMapper<tempModel>(tempModel.class));
	     return tempList ;
	}
 
  

在上面的代码中,提取sql语句到数据库中执行会得到一条结果。但是在程序运行中,debug打断点到return上时,显示所应该映射到tempList 的数据却为null
原因是聚合函数MIN()引起的
具体原因(个人看法):list无法接收 MIN() 这样的聚合函数结果,你可以考虑修改查询语句,将聚合函数直接应用于列。(上例中temp_table.brand_cd是可以直接映射到tempModel类中的brandCd列的,不需要特意AS→程序已做规则)
但是,对于使用聚合函数的查询语句,还是需要添加AS指定为存在的列,所以将查询语句

SELECT MIN(temp_table.brand_cd)

改为

SELECT MIN(temp_table.brand_cd) AS brandCd

就没有错误了!

你可能感兴趣的:(数据库,mysql,java)