【发布时间】:2017-04-21 20:08:03
【问题描述】:
我觉得这是一个简单的问题,但我尝试过的所有方法都不适合我。我有一个枚举,我有字符串构造函数的原因是因为 Java 不允许枚举是数字的。我直接尝试了 AA、AB、2C 没有字符串构造函数,但是这给出了一个错误。请注意,对于现有的枚举,我添加了 C("2C")。
public enum TestEnum{
AA("AA"), AB("AB"), C("2C");
private String display;
private TestEnum( String display ) {
this.display = display;
}
public String toString() {
return display;
}
public String getDisplay() {
return display;
}
public void setDisplay( String display ) {
this.display = display;
}
public String getName() {
return display;
}
现在我有一个 mybatis 映射器,它可以合并现有的,并且映射器的参数之一是 TestEnum。到目前为止,这工作得很好,因为枚举值和字符串值是相同的,但我添加了 C("2C")。现在我想使用 mybaits 向表中插入 2C,但它总是插入 C。
merge into text t
using (select #{id} as id from dual) d on (d.id = t.id)
when matched then
update set
appId = #{applId},
src = #{testEnum}
testEnum 插入 C,所以我将其更改为 #{testEnum.toString()},这给了我一个属性名称 toString() 没有 getter 错误。我尝试了#{testEnum.display} 和#{testEnum.name} 他们都仍然插入C,而我希望它插入2C。你们知道更简单的处理方法吗?
我不想改变模型对象来传递String而不是TestEnum,因为这个对象在很多地方都被使用了。有没有一种方法可以在不改变模型对象的情况下在mybatis映射器中完成?
感谢您的帮助:)
【问题讨论】:
标签: java enums mybatis enumeration ibatis