将java.sql.Connection注入到Ninja Framework

时间:2015-12-28 07:20:05

标签: java jdbc dependency-injection ninjaframework

我想使用JOOQ从Ninja Framework访问我的数据库。如何从控制器获取JDBC连接?

我发现这些资源不太合适。

How to retrieve the datasource used by a persistence unit programmatically - 从EntityManager获取连接的繁琐步骤。

http://blog.jooq.org/2015/05/26/type-safe-queries-for-jpas-native-query-api/ - 通过在JOOQ中构建查询并传递给EntityManager.createNativeQuery来工作。它功能齐全,但它不如仅仅具有连接那么好。

我可以将连接注入控制器,如下所示:

public Result myController(@DBConnection Connection connection) {
    List<String> articles = DSL.using(connection).selectFrom(ARTICLE).fetch(ARTICLE.TITLE);
    return Results.html().render("template", articles);
}

DropWizards有一个看似赢家的插件:https://github.com/benjamin-bader/droptools/tree/master/dropwizard-jooq

public BlogPost getPost(@QueryParam("id") int postId, @Context DSLContext database) {
    BlogPostRecord post = database
        .selectFrom(POST)
        .where(POST.ID.equal(postId))
        .fetchOne();

    // do stuff
}

2 个答案:

答案 0 :(得分:2)

没有直接从ninja框架检索JDBC ConnectionDataSource的任何选项,标准方法应该是&#34;展开&#34;来自EntityManager

Connection connection = em.unwrap(Connection.class);

另请参阅:How to get DataSource or Connection from JPA2 EntityManager in Java EE 6

此处记录了一种特定于Hibernate的方法:How to retrieve the datasource used by a persistence unit programmatically

答案 1 :(得分:2)

跟进@LukasEder的回答这是方法:

<ul id="menu">
  <li><a href="#">Menu</a>
    <ul class="submenu">
      <li><a href="$site_url">Home</a></li>
      <li><a href="index.cgi>See ALL</a></li>
            <li><a href=" index.cgi>Quick Availability</a>
      </li>
    </ul>
  </li>
</ul>
<ul id="menu">
  <li><a href="#">Choose</a>
    <ul class="submenu">
      <li><a href="$site_url>Blah</a></li>
            <li><a href=" index.cgi>Blah2</a>
      </li>
      <li>
        <a href="index.cgi">Blah3</a></li>
    </ul>
  </li>
</ul>

这显然是非常非常奇怪和糟糕的代码。

一个干净的解决方案是直接通过Ninja提供对Connection / DataSource的访问(将连接池与Hibernate或任何实现分开)。这不是太难,部分是在ebeans插件中完成的。如果您对提供代码感兴趣,请在我们的邮件列表中讨论:)