当前位置:网站首页>不要用jOOQ串联字符串
不要用jOOQ串联字符串
2022-08-02 00:05:00 【YYniannian】

jOOQ开箱即支持大量的SQL语法。因此,大多数用户在使用JDBC编写动态SQL时,不会像以前那样采用字符串连接的方式。 但时不时地,jOOQ不支持某个厂商的特定功能(是的,它发生了)。在这种情况下,jOOQ支持各种"普通SQL "API,它可以用来构造几乎所有类型的jOOQ API元素,比如。
// Static import is implied, as always
import static org.jooq.impl.DSL.*;
// Column expressions
Field<String> f = field("cool_function(1, 2, 3)", String.class);
// Predicates
Condition c = condition("col1 <fancy operator> col2");
// Tables
Table<?> t = table("wicked_table_valued_function(x, y)");
复制代码但是,有时候,你需要动态地传递一个参数给这样的函数,比如说另一个列的表达式。而你想以一种类型安全的方式做到这一点,因为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后面)。
边栏推荐
- How to reinstall Win11?One-click method to reinstall Win11
- 【HCIP】BGP小型实验(联邦,优化)
- Play NFT summer: this collection of tools is worth collecting
- [Headline] Written test questions - minimum stack
- 07-SDRAM: FIFO control module
- 【无标题】
- Interview high-frequency test questions solution - stack push and pop sequence, effective parentheses, reverse Polish expression evaluation
- 中缀转后缀、前缀表达式快速解决办法
- [Three sons] C language implements simple three sons
- 【解决】win10下emqx启动报错Unable to load emulator DLL、node.db_role = EMQX_NODE__DB_ROLE = core
猜你喜欢

SphereEx苗立尧:云原生架构下的Database Mesh研发实践

Unknown CMake command “add_action_files“

【加密周报】经济衰退在加息气氛中蔓延 美联储“放手一搏”?盘点上周加密市场发生的重大事件

Disk and file system management

Redis-消息发布订阅

玩转NFT夏季:这份工具宝典值得收藏

【HCIP】BGP小型实验(联邦,优化)

众筹DAO“枯萎”的缩影:曾拍下《沙丘》未出版手稿的Spice DAO解散

How to reinstall Win11?One-click method to reinstall Win11

Quick solution for infix to suffix and prefix expressions
随机推荐
els 方块变形
GetHashCode与Equals
协作乐高 All In One:DAO工具大全
GetHashCode方法与=
06-SDRAM : SDRAM control module
Zadig 面向开发者的自测联调子环境技术方案详解
基于超参数自动寻优的工控网络入侵检测
How does JSP use the page command to make the JSP file support Chinese encoding?
JSP Taglib指令具有什么功能呢?
IO stream basics
Graphical LeetCode - 1161. Maximum Sum of In-Layer Elements (Difficulty: Moderate)
如何设计循环队列?快进来学习~
NFT工具合集
els 方块边界变形处理
IP核:FIFO
C语言七夕来袭!是时候展现专属于程序员的浪漫了!
C language Qixi is coming!It's time to show the romance of programmers!
JSP如何使用request获取当前访问者的真实IP呢?
GIF making - very simple one-click animation tool
JSP 如何获取request对象中的路径信息呢?