我正在尝试使用MyBatis创建带注释的插入语句,其中在注释中指定了类型处理程序。
例如,在选择查询中,我们可以这样指定类型处理程序:
@Results({
@Result(column = "strings", property = "strings", typeHandler = StringArrayTypeHandler.class)
})
@Select("SELECT * FROM ${name} ORDER BY id ASC;")
List<StringObject> getStringObjects(@Param("name") String name);
但是,对于插入查询来说似乎不可能做到这一点,因为@Results
批注仅适用于@Select
查询。
当前,我的解决方法是将类型处理程序指定为查询字符串的一部分,如下所示:
@Options(useGeneratedKeys = true)
@Insert({"INSERT INTO ${name} (text, value, strings) VALUES (#{obj.text}, #{obj.value}, #{obj.strings, typeHandler=com.mypackage.typehandler.StringArrayTypeHandler});"})
void insertStringObject(@Param("obj") SenticConcept concept, @Param("name") String version);
我的问题是,我们可以在注释中指定类型处理程序类,而不是作为查询字符串的一部分吗?
答案 0 :(得分:0)
这无法完成。
结果映射使用列名a键,因为可以使用列名来标识结果集中的列值,即mybatis可以通过其名称获取某个列的值。因此,它可以使用映射配置(例如typeHandler
)来处理该列中的值。
在JDBC中查询的输入参数只能通过参数的索引来标识。原则上,可以实现一个基于参数索引指定typeHandler
的注释,但这很容易出错,因为查询中的更改可能导致参数索引中的更改(这可能是原因这不是在mybatis中完成的。)