jooq sql_jOOQ 4.0的新API仅将注释用于真正的声明性Java / SQL编程

jooq sql

这篇文章最初发表在jooq.org上 ,这是一个博客,从jOOQ的角度着眼于所有开源,Java和软件开发

SQL是唯一真正流行和成熟的4GL(第四代编程语言) 。 即,它是唯一流行的声明性语言。

同时,SQL已证明图灵完整性不保留给诸如C,C ++或Java之类的较小语言。 自从SQL:1999及其分层的公用表表达式以来, 可以将SQL安全地视为“图灵完善” 。 这意味着任何程序都可以用SQL编写。 不相信吗? 以这个SQL Mandelbrot集计算为例,可以在此Stack Overflow问题中看到

来源:http://stackoverflow.com/q/314864/521799上的用户Elie

来源:http://stackoverflow.com/q/314864/521799上的用户Elie

精彩! 不再需要程序和面向对象的任务。

到目前为止,我们怎么错了…

Data GeekeryjOOQ背后的公司 ),我们喜欢SQL。 而且我们喜欢Java。 但是过去一件事一直困扰着我们。 Java并不是真正的纯声明性语言。 对于开明的声明式程序员而言,许多Java语言构造都是真正的反模式。 例如:

1个
2
3
4
5
6
7
8
9
10
11
// This is bad
for (String string : strings)
     System.out.println(string);
// This is even worse
try {
     someSQLStatements();
}
catch (SQLException e) {
     someRecovery();
}

以上代码的命令式样式几乎没有用处。 程序员需要单调乏味地告诉Java编译器和JVM他们打算实现什么算法,直到单个语句,而实际上,实际上并不需要使用JIT和其他高级优化技术。

幸运的是,有注释

但是,从Java 5开始,专家组中就有远见卓识的人在Java语言中添加了一个强大的新概念:Annotations( 更多信息,请参见此处 )。 首先,仅使用少数有限使用的注释进行实验,例如:

  • @Override
  • @SuppressWarnings

但是,然后,更多有远见的人开始将这些注释结合起来,以完全声明性的形式形成类似组件的内容

1个
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@Path ( "/MonsterRest" )
@Stateless
@WebServlet (urlPatterns = "/MonsterServlet" )
@Entity
@Table (name = "MonsterEntity" )
@XmlRootElement
@XmlAccessorType (XmlAccessType.FIELD)
@NamedQuery (name = "findAll" , query = "SELECT c FROM Book c" )
public class Book extends HttpServlet {
 
     // ======================================
     // = Attributes =
     // ======================================
 
     @Id
     @GeneratedValue
     private Long id;
     private String isbn;
     private Integer nbOfPage;
     private Boolean illustrations;
     private String contentLanguage;
     @Column (nullable = false )
     @Size (min = 5 , max = 50 )
     @XmlElement (nillable = false )
     private String title;
     private Float price;
     @Column (length = 2000 )
     @Size (max = 2000 )
     private String description;
     @ElementCollection
     @CollectionTable (name = "tags" )
     private List<String> tags = new ArrayList<>();

看这个美女。 归功于Antonio Goncalves

但是,我们仍然认为上面有很多不必要的面向对象的膨胀。 幸运的是,使Java注释完全完成( 甚至是有感觉? )的最新创新现在终于可以使我们改善这种情况,特别是对于jOOQ而言,其目的是在Java中建模声明性SQL语言。 最后,注释非常合适!

这些创新是:

这些创新使我们能够完全重新实现整个jOOQ 4.0 API,以允许用户按以下方式编写SQL:

1个
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Select ({
     @Column ( "FIRST_NAME" ),
     @Column ( "LAST_NAME" )
})
@From (
     table = @Table ( "AUTHOR" ),
     join = @Join ( "BOOK" ),
     predicate = @On (
         left = @Column ( "AUTHOR.ID" ),
         op = @Eq ,
         right = @Column ( "BOOK.AUTHOR_ID" )
     )
)
@Where (
     predicate = @Predicate predicate = (
         left = @Column ( "BOOK.TITLE" ),
         op = @Like ,
         right = @Value ( "%Annotations in a Nutshell%" @Value "%Annotations in a Nutshell%" )
     )
)
class SQLStatement {}

就像JPA一样,这使jOOQ现在通过使用注释完全透明和声明式。 现在,开发人员将能够完全毫不费力地将其从中级到高度复杂SQL查询转换为与jOOQ批注完全相同的查询。

不用担心,我们将提供迁移脚本,以将您的旧版jOOQ 3.x应用程序升级到4.0。 一个正在运行的原型正在开发中,预计将很快发布,非常欢迎早期采用者的反馈,敬请期待更多令人兴奋SQL优点!

翻译自: https://jaxenter.com/jooq-4-0s-new-api-will-use-annotations-only-for-truly-declarative-javasql-programming-125229.html

jooq sql

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值