JDBCTemplate布尔值未使用BeanPropertyRowMapper正确映射

时间:2018-04-06 23:39:20

标签: java spring jdbctemplate

我有一个带有用户表的标准MySql DB。在这个表中有一个名为" isApproved"的

对于此用户,它设置为" 1" (我相信这是真的)我的bean属性看起来像这样:

private boolean isApproved;

和适当的getter / setter:

public boolean isApproved() {
    return isApproved;
}
public void setApproved(boolean isApproved) {
    this.isApproved = isApproved;
}

我有一个正在拉动正确用户的jdbcTemplate,它看起来像这样:

public UserBean findUserByUserName(String userName) {
    String sql = "SELECT * FROM User WHERE name = ?";
    return (UserBean)getJdbcTemplate().queryForObject(sql, new BeanPropertyRowMapper<UserBean>(UserBean.class), userName);
}

所以我想我可能犯了一个简单的错误,并将其添加到日志记录中:

logger.debug("User from DB isApproved:"+userFromDb.isApproved());

即使存在&#34; 1&#34;这也会回来&#34; false&#34;在DB。

如何使此映射正确,isApproved是&#34; 1&#34;它应该等于true作为布尔值。

1 个答案:

答案 0 :(得分:3)

Bean命名意味着你获取列名,然后调用setter方法setColumnName和getter方法getColumnName,除了布尔值,它被命名为isColumnName

您的列名为isApproved,因此标准bean名称为setIsApprovedisIsApproved。看到问题了?

正如BeanPropertyRowMapper的javadoc所说:

  

为了便于在不具有匹配名称的列和字段之间进行映射,请尝试在SQL语句中使用列别名,如:

     
select fname as first_name from customer

这意味着您无法使用SELECT *,但这没关系,因为您应该从不在代码中使用SELECT *。见Why is SELECT * considered harmful?

*便于即席查询,或查询动态数据,您可以使用元数据分析结果列。由于您需要映射到特定类,因此需要选择需要映射的列。