gpt4 book ai didi

java - BeanPropertyRowMapper 在 spring 内部是如何工作的?

转载 作者:搜寻专家 更新时间:2023-11-01 03:51:01 26 4
gpt4 key购买 nike

我知道 BeanPropertyRowmapper 在我触发 select 查询时使用 setter 方法但是它是否使用 getter 方法 ?

我面临以下问题:

database 中,defaultPriority 在 string 中,但我想在我的 SMSAction pojo 类中设置 int 值.

class SMSAction implements Serializable {

private int defaultPriority;

public int getDefaultPriority() {
System.out.println("Inside getDefaultPriority()");
return defaultPriority;
}

public void setDefaultPriority(String defaultPriority) {
System.out.println("Inside setDefaultPriority(String defaultPriority)"+defaultPriority);

if(defaultPriority.equalsIgnoreCase("L")){
System.out.println("Condition");
this.defaultPriority = 1;
}
}
}

这是我遇到的错误:

Exception in thread "main" org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [select SMSACTIONID,SMSACTIONCODE,ACTIONDESC,CASID,DEFAULTPRIORITY from tblsmsaction]; SQL state [99999]; error code [17059]; Fail to convert to internal representation; nested exception is java.sql.SQLException: Fail to convert to internal representation
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:660)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:695)

当数据库和我的 pojo 中的数据类型不同时,如何解决上述问题?当我将 return type of getDefaultPriority() 更改为 String 时,它的工作正常但我无法理解这就是为什么 BeanPropertyRowMapper 使用 getDefaultPrioriy() 以及我的 log 打印在 getDefaultPriority() 中的原因显示

注意:我不想制作我的自定义行映射器或 hibernate 或 JPA。请帮助我。

最佳答案

在我看来,您做错了(不是很)错。您有一些规则设置模板中的内容(阅读class)。 Setters/Getters 应该非常整洁;事实上,你需要存储一个 int 但你正在应用一些规则来弄清楚 int 值与你设置/获取的方式无关bean 中的特定值。

每当您从数据库中获取 String 值时,应用规则并调用 setter:

// [db layer] here you already got the real value(s) through a database call
SMSAction action = new SMSAction();

// priority is some arbitrary name I used to simulate the variable that holds the String coming from the database
if (priority.equalsIgnoreCase("L")) {
action.setDefaultPriority(1);
}
// ...

现在,有些人更喜欢另一层的那种业务规则,但那是另一回事了;正如您所看到的,在 DTO/包装器对象或类似对象中将值从一层传输到另一层很容易。

祝你好运!

关于java - BeanPropertyRowMapper 在 spring 内部是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28060240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com