为带注释的MyBatis插入指定类型处理程序

时间:2019-05-15 12:00:20

标签: java sql postgresql spring-boot mybatis

我正在尝试使用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);

我的问题是,我们可以在注释中指定类型处理程序类,而不是作为查询字符串的一部分吗?

1 个答案:

答案 0 :(得分:0)

这无法完成。

结果映射使用列名a键,因为可以使用列名来标识结果集中的列值,即mybatis可以通过其名称获取某个列的值。因此,它可以使用映射配置(例如typeHandler)来处理该列中的值。

在JDBC中查询的输入参数只能通过参数的索引来标识。原则上,可以实现一个基于参数索引指定typeHandler的注释,但这很容易出错,因为查询中的更改可能导致参数索引中的更改(这可能是原因这不是在mybatis中完成的。)