我已经在dropwizard项目中定义了资源类
@Path("/user/{user}")
@Produces(MediaType.APPLICATION_JSON)
public class UserResource {
@GET
@Path("/attribute/{attr_name}")
public Attribute fetch(@PathParam("user") IntParam uid, @PathParam("attr_name") String attrName)
{
//TODO: write code here
}
}
我想在这里使用sql接口在
uid
和attrName
上执行一些sql查询。接口位于程序包mypackage.api
中,该程序包是资源程序包的并行程序包。我如何在这里实现这些接口。
最佳答案
我的dropwizard服务使用jdbi与数据库层进行交互。
我使用的方法(这是相当标准的方法,适用于您的方案)是在dropwizard Application类运行方法中定义jdbi工厂,例如(数据库配置详细信息位于yml配置文件中-应该是在线提供的示例):
final DBIFactory factory = new DBIFactory();
final DBI jdbi = factory.build(environment, configuration.getDatabaseConfig(), "<your-database-name>");
一旦可以访问jdbi工厂,就可以直接实例化dao接口:
final MyDao myDao = jdbi.onDemand(MyDao.class);
正如上面的家伙在问题注释中提到的那样,您只需要将dao对象传递到您的资源中,例如通过构造函数:
MyResource myResource = new MyResource(myDao);
您的dao应定义将您的资源参数作为“绑定”变量接受的函数,然后可用于查找数据