我有一个带有用户表的标准MySql DB。在这个表中有一个名为" isApproved"的 对于此用户,它设置为" 1" (我相信这是真的)我的bean属性看起来像这样: 和适当的getter / setter: 我有一个正在拉动正确用户的jdbcTemplate,它看起来像这样: 所以我想我可能犯了一个简单的错误,并将其添加到日志记录中: 即使存在" 1"这也会回来" false"在DB。 如何使此映射正确,isApproved是" 1"它应该等于true作为布尔值。private boolean isApproved;
public boolean isApproved() {
return isApproved;
}
public void setApproved(boolean isApproved) {
this.isApproved = isApproved;
}
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());
答案 0 :(得分:3)
Bean命名意味着你获取列名,然后调用setter方法setColumnName
和getter方法getColumnName
,除了布尔值,它被命名为isColumnName
。
您的列名为isApproved
,因此标准bean名称为setIsApproved
和isIsApproved
。看到问题了?
正如BeanPropertyRowMapper
的javadoc所说:
为了便于在不具有匹配名称的列和字段之间进行映射,请尝试在SQL语句中使用列别名,如:
select fname as first_name from customer
这意味着您无法使用SELECT *
,但这没关系,因为您应该从不在代码中使用SELECT *
。见Why is SELECT * considered harmful?
*
便于即席查询,或查询动态数据,您可以使用元数据分析结果列。由于您需要映射到特定类,因此需要选择需要映射的列。