jooq sql_JOOQ事实:SQL函数变得简单

jooq sql

JDBC API一直很麻烦且容易出错,我从来都不喜欢使用它。 Spring JDBC框架带来了第一个重大改进,该框架通过其JdbcTemplateSqlFunction类(仅举几例)简单地重振了JDBC的使用。 但是Spring JDBC并没有解决使用字符串函数或输入参数名称的缺点,这为类型安全SQL包装器(如JOOQ)打开了大门

JOOQ是迈向更好的JDBC API的下一个主要步骤,自从我开始使用它以来,我就知道没有回头路了。 JOOQ成为我构建动态查询的第一选择,最近它成为我的标准SQL函数包装器。

为了证明这一点,我将从一个简单SQL函数开始:

CREATE FUNCTION FORMAT_TIMESTAMP (IN_TIME TIMESTAMP) RETURNS CHAR
    RETURN TO_CHAR(IN_TIME, 'DD-MON-YYYY HH24:MI:SS.FF');

尽管您永远不要使用数据库来格式化日期,但是由于这是应用程序逻辑的工作,因此为了进行测试,让我们专注于输入和输出变量类型,因为这是JOOQ优于其他任何JDBC API的地方。

对于Spring,这就是我的称呼:

@Resource
private DataSource localTransactionDataSource;

@Override
public String formatTimestamp() {
	SqlFunction<String> sqlFunction =
		new SqlFunction<String>(localTransactionDataSource, "{ ? = call FORMAT_TIMESTAMP(?) }", new int[]{Types.TIMESTAMP});
	return (String) sqlFunction.runGeneric(new Date[]{new Date()});
}

这比标准的JDBC API更好,但是我不喜欢使用String参数名称或转换返回值。 由于HSQLDB不支持将OUT参数用于SQL函数,因此我无法使用StoredProcedureSimpleJdbcCall ,它们可能为SqlFunction示例提供了更好的替代方法。

让我们看看如何使用JOOQ进行调用:

@Autowired
private DSLContext localTransactionJooqContext;

@Override
public String formatTimestamp() {
	FormatTimestamp sqlFunction = new FormatTimestamp();
	sqlFunction.setInTime(new Timestamp(System.currentTimeMillis()));
	sqlFunction.execute(localTransactionJooqContext.configuration());
	return sqlFunction.getReturnValue();
}

在我看来,这是迄今为止我使用过的最精美SQL函数包装器,这就是为什么它成为我调用SQL函数和过程的标准方法的原因。

参考: JOOQ事实: Vlad Mihalcea博客博客中的JCG合作伙伴 Vlad Mihalcea简化了SQL函数

翻译自: https://www.javacodegeeks.com/2014/02/jooq-facts-sql-functions-made-easy.html

jooq sql

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值