JDBI仅公开针对JDBC公开的基于类型的显式绑定。JDBC不会公开用于绑定的UUID类型,因此默认情况下会将其设置为Object。不幸的是,JDBC没有提供显式的UUID绑定机制,因此通过String可能是最可移植的方式:-(
如果要在Java中将其绑定为UUID并在内部将其转换为String,则有两条路径。首先,如果您 始终
要将UUID绑定为字符串,则是使用ArgumentFactory,请参见https://github.com/brianm/jdbi/blob/master/src/test/java/org/skife/jdbi/v2/sqlobject
/TestRegisterArgumentFactory.java为例。
第二个是,如果只想在特定情况下这样做,则可以创建一个自定义的活页夹,例如使用http://jdbi.org/sql_object_api_argument_binding/
使用ArgumentFactory实现从UUID到字符串的全局绑定的示例:
UUIDArgumentFactory.java:
public class UUIDArgumentFactory implements ArgumentFactory<UUID> { @Override public boolean accepts(Class<?> expectedType, Object value, StatementContext ctx) { return value instanceof UUID; } @Override public Argument build(Class<?> expectedType, UUID value, StatementContext ctx) { return new UUIDArgument(value); }}
UUIDArgument.java:
public class UUIDArgument implements Argument { private final UUID value; public UUIDArgument(UUID value) { this.value = value; } @Override public void apply(int position, PreparedStatement statement, StatementContext ctx) throws SQLException { statement.setString(position, value.toString()); } }
寄存器:
final DatabaseFactory factory = new DatabaseFactory(environment);final Database db = factory.build(configuration.getDatabaseConfiguration(), "sqlserver");db.registerArgumentFactory(new UUIDArgumentFactory());
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)