我已经在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接口在uidattrName上执行一些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应定义将您的资源参数作为“绑定”变量接受的函数,然后可用于查找数据

09-26 22:56