我正在使用Dropwizard和JDBI。我有一个典型的用户数据dao:
public interface UserDao
{
@SqlQuery("select * from users where role = :id")
@Mapper(UserMapper.class)
String findNameById(@BindBean Role role);
}
用户自己拥有Role
类型的属性:
class User
{
private Role role;
/* the rest: other attributes, getters, setters, etc. */
}
角色包含在另一个名为roles
的表中。现在,我需要在映射器中映射Role
,但我不想更改SELECT ...
语句以添加JOIN roles ...
部分。我们都知道连接如何影响查询,从长远来看,我希望尽可能避免任何连接。
我知道,ResultSetMapper
接口有map()
方法,传递给它StatementContext
。该上下文有一个getBinding()
方法,它返回一个Binding
类,包含我需要的所有数据:
named = {HashMap$Node@1230} size = 3
0 = {HashMap$Node@1234} "id" -> "1"
1 = {HashMap$Node@1235} "name" -> "TestRole"
2 = {HashMap$Node@1236} "class" -> "class com.example.Role"
但是class com.example.Role
不是Role
的实例,它是Argument
的一个实例,我无法使用它。
那么,有没有办法获得Role
参数而我只是没有看到它或者我必须从绑定参数中实例化它(再次......)(显然它们在那里如调试器所示)?