我正在玩一些 jooq 代码。我注意到使用 jooq 创建 sql 它会强制您创建数据库连接。想知道如何在没有数据库连接的情况下执行此操作:
String url = env.getProperty("spring.datasource.url");
String user = env.getProperty("spring.datasource.username");
String pass = env.getProperty("spring.datasource.password");
try (Connection conn = DriverManager.getConnection(url, user, pass)) {
DSLContext create = DSL.using(conn, SQLDialect.SQLSERVER2014);
String sql = create.select().from(DATA1).offset(100).limit(20).getSQL();
}
catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 我试图在我当前的项目(用 Java 编写)中第一次使用 jooq。我想在 Jooq DSL 上下文中集成 Hikari 连接池。我想明确定义最大连接数。任何推荐的文章,我可以遵循的代码来完成它。
谢谢
我已经设置了 jooq,现在我可以为我的数据库生成代码。
public static void init() {
Target l_target = new Target();
System.out.println("My directory is::"+l_target.getPackageName());
l_target.setDirectory("src/main/java");
l_target.setPackageName("com.my.paas.css.entity");
Configuration configuration = new Configuration()
.withJdbc(new Jdbc()
.withDriver("com.mysql.jdbc.Driver")
.withUrl("jdbc:mysql://localhost:3306/paas")
.withUser("root"))
.withGenerator(new Generator()
.withDatabase(new Database()
.withName("org.jooq.meta.mysql.MySQLDatabase")
.withIncludes(".*")
.withExcludes("")
.withInputSchema("paas"))
.withTarget(l_target));
try {
GenerationTool.generate(configuration);
} catch (Exception ex) {
System.out.println();
ex.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud) 据我所知,MyBatis 和 jOOQ 用于类似的情况。所以我想知道什么时候应该在 Spring 应用程序中使用 jOOQ 而不是 MyBatis,以及每个库和框架在开发时带来的技术优缺点。
如果有人已经熟练使用 MyBatis 这样的框架编写 SQL 查询,那么切换到 jOOQ 会给他们带来什么技术优势(查询运行时、编译时错误)?
我有一个 Spring Cloud Gateway 应用程序将身份验证数据保存到数据库。应用程序在 kubernetes 中运行。我有太多不同的情况,有时我有 json 数据要保存,有时 json 数据为空。保存此数据的代码如下所示:
with(AUTHENTICATED_SESSION) {
context.insertInto(this, ACCESS_TOKEN_MD5_HASH, REFRESH_TOKEN, CONTEXT_DATA)
.values(
accessTokenMd5,
refreshToken,
if (contextData != null) {
JSONB.jsonb(objectMapper.writeValueAsString(contextData))
} else {
null
}
)
.execute()
}
Run Code Online (Sandbox Code Playgroud)
生成的列定义
public final TableField<AuthenticatedSessionRecord, JSONB> CONTEXT_DATA = createField(DSL.name("context_data"), SQLDataType.JSONB, this, "");
Run Code Online (Sandbox Code Playgroud)
保存空值通常应该像这样:
insert into "public"."authenticated_session" ("access_token_md5_hash", "refresh_token", "context_data") values (?, ?, cast(? as jsonb))
: -> with bind values : insert into "public"."authenticated_session" ("access_token_md5_hash", "refresh_token", "context_data") values ('hash', 'token', cast(null as jsonb))
Run Code Online (Sandbox Code Playgroud)
有时查询看起来像这样,它会导致下面的异常
insert into "public"."authenticated_session" …Run Code Online (Sandbox Code Playgroud) jooq ×4
database ×2
java ×2
spring-boot ×2
java-8 ×1
kotlin ×1
mybatis ×1
mysql ×1
postgresql ×1
spring ×1