跳到主要内容

Connection Manager

基本概念

Jimmer中一切可执行的语句和指令都支持两种执行模式:

  • 基于用户指定的JDBC连接执行

  • 由Jimmer自动决定基于某个JDBC连接执行

这里,以Executable(Java)或KExecutable(kotlin)接口为例

Executable.java
package org.babyfish.jimmer.sql.ast;

import java.sql.Connection;

public interface Executable<R> {

R execute();

R execute(Connection con);
}
  • execute(Connection):在用户指定的JDBC连接上执行。

    以查询为例:

    BookTable book = Tables.BOOK_TABLE;

    List<Book> books = sqlClient
    .createQuery(book)
    .select(book)
    .execute(con);
    信息

    对这种使用方式而言,无需对SqlClient做出特别配置。

  • execute()execute(null):由Jimmer自主决定在某个JDBC连接上执行。

    以查询为例:

    BookTable book = Tables.BOOK_TABLE;

    List<Book> books = sqlClient
    .createQuery(book)
    .select(book)
    .execute();
    信息

    对这种使用方式而言,必须为SqlClient配置ConnectionManager。否则将会导致异常。

    毫无疑问,第2种方式更符合业务系统开发要求,推荐使用。所以强烈建议为SqlClient配置ConnectionManager

简单的ConnectionManager

javax.sql.DataSource dataSource = ...;

JSqlClient sqlClient = JSqlClient
.newBuilder()
.setConnectionManager(
ConnectionManager
.simpleConnectionManager(dataSource)
)
.build();
危险

这种方式仅负责从DataSource获取连接,并没有事务管理机制。

但是,实际项目中,事务非常重要,因此,除学习和尝试外,不建议在实际项目使用这种方式。

受Spring事务管理的ConnectionManager

这个话题在Spring篇/整合Spring事务中详细讨论过,本文不做重复阐述。

提示

让Jimmer受到Spring事务的管理,是推荐用法。