Jdbi библиотека достаточно популярна в использовании при необходимости подключения к разным базам данных (подробнее в офф. документации).
Данная библиотека "из коробки" поддерживает множество типов данных в качестве параметров запроса, но не UUID тип (для MS SQL базы точно).
Печально. Но решение есть (и даже задокументировано). Всё, что необходимо сделать, это только добавить...
Во-первых, новый класс:
public class UUIDArgumentFactory extends AbstractArgumentFactory<UUID> { UUIDArgumentFactory() { super(Types.VARCHAR); } @Override protected Argument build(UUID value, ConfigRegistry config) { .setString(position, value.toString()); }} return (position, statement, ctx) -> statement
И использовать его:
...
jdbi.registerArgument(newUUIDArgumentFactory());
jdbi.open();
...
И всё готово!
Теперь мы можем использовать UUID тип в наших запросах, в качестве параметра:
@SqlQuery("SELECT * FROM [db].[Users] WITH (nolock) " +
"WHERE UserID=:Id ORDER BY CreatedDate desc")@RegisterFieldMapper(UserDTO.class)
UserDTO getUserById(@Bind("Id") UUID searchId);
Никаких больше постоянных .toString() для приведения типов UUID к String для вызова запроса с параметром.💗