Использование UUID типа в @Bind sql запроса jdbi библиотеки

 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(new UUIDArgumentFactory());

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 для вызова запроса с параметром.💗