【发布时间】:2018-04-06 23:39:19
【问题描述】:
我有一个带有用户表的标准 MySql 数据库。在这个表中有一个名为“isApproved”的 TINYINT(4)
对于这个用户,它设置为“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());
即使数据库中有一个“1”,这也会返回“假”。
如何使这个映射正确,isApproved 是“1”,它应该等同于布尔值。
【问题讨论】:
-
不确定,但我相信这个问题发生在我身上。将 isApproved 更改为已批准,并将方法更改为 getApproved()。我记得 JDCB 引擎会在你的情况下寻找 set+variable name 的问题。 setIsApproved() 所以它不会尊重布尔值的java命名约定。因此,只需将变量名称更改为普通名称,并使用普通 set 和 get。
-
@MohdAlomar 名称
isXxx适用于 boolean getter 方法。它是 bean 命名标准的一部分。这不是 JDBC 引擎做的。这是 SpringBeanPropertyRowMapper类。 -
@Andreas 不确定,但问题发生在我使用球衣、休眠和实体时。
-
@MohdAlomar 这个问题是关于使用
JdbcTemplate和BeanPropertyRowMapper的Spring Framework 代码。只是 JDBC 和 Spring。没有泽西岛。没有休眠。没有 JPA。那么你所说的与这个问题有什么关系,isApproved是一个非常好的名称(一旦 OP 使用列别名来解决命名问题)?告诉 OP 不要使用isApproved具有误导性。
标签: java spring jdbctemplate