sql-generator 可用 JSON 来轻松生成复杂的 SQL,从而大幅提高写 SQL 的效率。
结构化
,像写文章大纲一样编写和阅读 SQL如果你要写一句复杂的 SQL,且 SQL 中很多代码是 相似 但又不相同的。那么推荐使用该工具,可以不用重复编写 SQL,更有利于修改、维护和理解。
尤其是在大数据分析场景下,经常会有编写复杂 SQL 的需求。
当然,你也完全可以把它当做一个 重复代码生成器
~
需求:计算 id = 1 和 id = 2 的两位同学的身高差
SQL 大概是这样的:
select (s1.height - s2.height) as 身高差 from (select * from student where id = 1) s1, (select * from student where id = 2) s2
显然,上述 SQL 中学生表查询了 2 次,而且除了查询的 id 不同外,查询逻辑完全一致!
如果后面查询学生的逻辑发生修改,那么以上 2 个子查询都要同时修改,不利于维护。
而使用本工具,只需编写如下 JSON,就能自动生成完整的 SQL 了:
{ "main": "select @身高差() from (@学生表(id = 1)) s1, (@学生表(id = 2)) s2", "身高差": "(s1.height - s2.height) as 身高差", "学生表": "select * from student where id = #{id}" }
通过类似 函数调用 + 传参
的方式,我们无需重复编写 SQL,而且整个 SQL 的逻辑更清晰!
当然,以上只是一个示例,真实大数据离线分析的场景下,SQL 可比这复杂 N 倍!
如果感兴趣的话,欢迎往下看文档,还有更复杂的示例~
可以把下面的代码放到生成器中试试,一下就明白如何使用啦~
{ "main": "必填, 代码从这里开始生成, 用 @规则名() 引用其他语句", "规则名": "可以编写任意 SQL 语句 @规则名2() @动态传参(a = 求给 ||| b = star)", "规则名2": { "sql": "用 #{参数名} 指定可被替换的值", "params": { "参数名": "在 params 中指定静态参数, 会优先被替换" } }, "动态传参": "#{a}鱼皮#{b}" }
对象键
:定义 SQL 生成规则名称,main 表示入口 SQL,从该 SQL 语句开始生成。对象值
:定义具体生成规则。可以是 SQL 字符串或者对象。sql
:定义模板 SQL 语句,可以是任意字符串,比如一组字段、一段查询条件、一段计算逻辑、完整 SQL 等。params
:静态参数,解析器会优先将该变量替换到当前语句的 #{变量名} 中#{xxx}
:定义可被替换的变量,优先用当前层级 params 替换,否则由外层传递@xxx(yy = 1 ||| zz = #{变量})
:引用其他 SQL,可传参,参数可再用变量来表示,使用 |||(三个竖线)来分隔参数。Vue3 + Vite + Ant Design Vue
开发界面,选用 Monaco Editor
实现代码编辑、高亮、格式化等功能,使用 TypeScript + ESLint
保证代码规范。SQL 生成逻辑如下:
解析器原本采用正则非贪婪替换方式实现,但无法实现嵌套调用,比如 @a(xx = @b()),会被识别为 @a(xx = @b(),匹配到了最近的右括号。 因此针对括号嵌套的情况对子查询替换算法做了优化,已支持包含括号语句的嵌套调用。
Mybatis 概述 什么是MyBatis 一款优秀的持久层框架 支持定制化sql,存储过程一级高级映射 避免了几乎所有jdbc代码和手动设置参数以及获取结果集 可以使用简单的xml或注解来配置和映射原生类型,接口和java的pojo为数据库中的记录 本是apache的开源项目ibatis 2010年迁移到了google code 改名为mybatis 2013年迁移到github 持久化 持久化
前言 接着上篇文章,一步步自定义需要生成的自定义方法以及在mapper.xml中生成自己想要的sql文件 开始改造 更改mapper方法命名风格 mybatis-generator生成的默认方法不是我想要的,我想要的风格如下: selectByPrimaryKey --> selectOne updateByPrimaryKeySelective --> update deleteByPrimar
前言 在mybatis generator自定义sql基本和自定义命名风格的流程一样,当然也需要我们去写代码,完成整个扩展 扩展方法与sql 先修改org.mybatis.generator.api.IntrospectedTable.java类,在InternalAttribute增加自己需扩展的自定义方法枚举值,如想新增一个 selectList方法,定义一个ATTR_SELECT_LIST枚
通过generator生成的sql,执行时报错,把sql copy出来到数据库手动执行,发现也报错 org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You
mybatis generator生成连接mysql与sqlserver所在的区别在于驱动和数据库URL不同 mybatis generator连接mysql的配置文件是: 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 33 34 35 36 37 38 39 40
本页描述了 Storm SQL 的设计和实现. 概览 SQL是一个很好使用但又复杂的标准. 包括 Drill,Hive,Phoenix 和 Spark 在内的几个项目都在其 SQL 层面上投入了大量资金. StormSQL 的主要设计目标之一是利用这些项目的现有资源. StormSQL 利用Apache Calcite 来实现 SQL 标准. StormSQL 专注于将 SQL 语句编译成Stor
generator 也就是生成器的英文拼写,它的主要作用是生成大批量的数据 方法一 (x for x in ['a', 'v']) 其实也就是把上一章迭代方法中的[]换成了(),那么返回的对象就不同了,前者是生成了一个list后者是生成了一个生成器。 其实跟js中的generator是一样的,打印出来这个生成器的内容只需要使用next()方法就OK了 l = ( x for x in ['1','
生成器根据处理后的原始文件建立路由。 概要 hexo.extend.generator.register(name, function(locals){ }); 在函数中会传入一个 locals 参数,等同于 网站变量,请尽量利用此参数取得网站数据,避免直接存取资料库。 更新路由 hexo.extend.generator.register('test', function(locals){
本文向大家介绍SQL(结构化查询语言)和T-SQL(Transact-SQL)之间的区别。,包括了SQL(结构化查询语言)和T-SQL(Transact-SQL)之间的区别。的使用技巧和注意事项,需要的朋友参考一下 的SQL SQL,结构化查询语言是一种非过程性语言,数据库引擎使用它来解释SQL查询以创建/修改/访问数据库元素。 T-SQL T-SQL Transact-SQL是SQL的过程扩展,
DB2 RazorSQL可生成SQL用于执行,,,和等操作。 选择特定列或使用语句选择全部。 得到以下结果: 通过使用,可以在表中插入记录。如下图所示: 生成代码结果如下: 通过使用,可以更新表中的记录。 生成代码结果如下: 通过使用,可以删除表中的记录。 生成代码结果如下:
迭代器和生成器这两个概念总是很容易混淆,经过上节的学习我们知道迭代器是一个对象,那么本节首先要记住:生成器是一种能够中途停止,然后从停止的地方继续运行的函数。可以借助 yield 或 return 停止函数运行。 1. 慕课解释 通过 function* 来创建一个生成器函数,在调用一个生成器函数后,并不会立即执行函数中的代码,而是会返回一个迭代器对象,通过调用迭代器对象的 next() 方法,可