jOOQ串联字符串拒绝使用的原因实例

 更新时间:2022年08月01日 16:13:51   作者:DebugUsery  
这篇文章主要为大家介绍了jOOQ串联字符串拒绝使用的原因实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

jOOQ开箱即支持大量的SQL语法。因此,大多数用户在使用JDBC编写动态SQL时,不会像以前那样采用字符串连接的方式。 但时不时地,jOOQ不支持某个厂商的特定功能(是的,它发生了)。在这种情况下,jOOQ支持各种"普通SQL "API,它可以用来构造几乎所有类型的jOOQ API元素,比如:

但是,有时候,你需要动态地传递一个参数给这样的函数,比如说另一个列的表达式。而你想以一种类型安全的方式做到这一点,因为jOOQ代码生成器已经产生了类型安全的列表达式。所以你可能会倾向于串联,尽管如此:

field("cool_function(1, " + MY_TABLE.MY_COLUMN + ", 3)");

千万不要这样做!因为这些原因:

  • 尽管jOOQ在一般情况下是非常安全的SQL注入,但事实上你还是可以在这里引入一个普通的SQL注入漏洞。在这种情况下不会,因为该列是生成的代码,但也许,你会把用户的输入连接起来。请注意,为了增加SQL注入保护,可以通过添加我们的PlainSQL检查器,使用检查器框架或Google ErrorProne,在全局范围内防止普通SQL的使用,只在需要时允许本地使用。
  • 和以往的字符串连接一样,你很容易出现SQL语法错误。在这种情况下,生成的SQL不针对任何方言,因为MY_TABLE.MY_COLUMN.toString() ,没有任何上下文信息,如SQLDialect 和所有其他配置标志。

相反,使用jOOQ的纯SQL模板小语言,它允许模板占位符,如{0}, {1}, {2} :

field("cool_function(1, {0}, 3)", MY_TABLE.MY_COLUMN);

如果你经常这么做,你可以在你自己的迷你DSL中考虑这个调用:

public static Field<String> coolFunction(Field<?> field) {
    field("cool_function(1, {0}, 3)", field);
}

而现在,像这样调用:

coolFunction(MY_TABLE.MY_COLUMN)

作为一个经验法则:使用jOOQ,你应该永远不需要借助于SQL字符串连接,你可以始终使用以下两种方法:

  • 类型安全的jOOQ DSL API
  • 普通的SQL模板API(最好是把这种用法隐藏在你自己的类型安全DSL API后面)

以上就是jOOQ串联字符串拒绝使用的原因实例的详细内容,更多关于jOOQ串联字符串的资料请关注脚本之家其它相关文章!

相关文章

  • SpringBoot快速入门详解

    SpringBoot快速入门详解

    springboot提供了一种快速使用spring的方式,基于coc的思想,即约定大于配置,通过本文学习快速掌握springboot入门知识,感兴趣的朋友跟随小编一起看看吧
    2021-07-07
  • maven坐标Dependencies和Exclusions的使用

    maven坐标Dependencies和Exclusions的使用

    这篇文章主要介绍了maven坐标Dependencies和Exclusions的使用,很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 详解Spring Retry实现原理

    详解Spring Retry实现原理

    这篇文章主要介绍了详解Spring Retry实现原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • 解决SpringBoot使用@Value获取不到yaml中配置值的问题

    解决SpringBoot使用@Value获取不到yaml中配置值的问题

    在最近的开发中遇到一个问题,使用@Value获取yml文件中配置的属性时始终获取不到值,所以本文给大家详细介绍了SpringBoot使用@Value获取不到yaml中值的问题分析及解决方法,需要的朋友可以参考下
    2024-01-01
  • idea2020最新版配置maven的方法

    idea2020最新版配置maven的方法

    这篇文章主要介绍了idea2020最新版配置maven的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • GraalVM系列Native Image Basics静态分析

    GraalVM系列Native Image Basics静态分析

    这篇文章主要为大家介绍了GraalVM系列Native Image Basics静态分析详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 使用javax.validation.constraints对请求体进行统一校验

    使用javax.validation.constraints对请求体进行统一校验

    这篇文章主要介绍了使用javax.validation.constraints对请求体进行统一校验方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • SpringBoot整合neo4j使用详解

    SpringBoot整合neo4j使用详解

    这篇文章将和大家详细聊聊如何在springboot应用中集成和使用neo4j,文中有详细的实现流程和实例代码,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-10-10
  • java封装实例用法讲解

    java封装实例用法讲解

    在本篇文章里小编给大家整理了一篇关于java封装实例用法及相关知识点,有兴趣的朋友们可以参考下。
    2021-01-01
  • 浅谈SpringBoot2.3 新特配置文件属性跟踪

    浅谈SpringBoot2.3 新特配置文件属性跟踪

    这篇文章主要介绍了浅谈SpringBoot2.3 新特配置文件属性跟踪,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06

最新评论