要解决您的“任意类型”问题,您可以实现 aBinderFactory
以绑定到您想要的任何东西。
@BindingAnnotation(UserBinder.UserBinderFactory.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface UserBinder {
public static class UserBinderFactory implements BinderFactory {
@Override
public Binder build(Annotation annotation) {
return new Binder<UserBinder, User>() {
@Override
public void bind(SQLStatement<?> q, UserBinder bind, User arg) {
q.bind("userId", arg.getUserId());
q.bind("uuid", arg.getUuid());
q.bind("openId", arg.getOpenId());
q.bind("givenName", arg.getGivenName());
// etc.
}
};
}
}
}
如果您有想要以特定方式存储的复杂类型,例如二进制数据,或者您想要转换为 CSV 或仅存储在单独的映射表中的集合,这将非常有用。然后你像这样使用你的新花式活页夹:
@SqlUpdate(
"INSERT INTO user (openId,givenName,uuid," +
// etc.
") VALUES (:openId,:givenName,:uuid" +
// etc.
")"
)
public abstract int createUser(
@UserBinder User user
);
你也可以使用@BindBean
注解,它会通过绑定参数名自动查找对象上的字段(例如,它可以将查询占位符映射":userId"
到getUserId()
方法)。