JSqlparser github地址
JSqlParser is a SQL statement parser. It translates SQLs in a traversable hierarchy of Java classes. JSqlParser is not limited to one database but provides support for a lot of specials of Oracle, SqlServer, MySQL, PostgreSQL … To name some, it has support for Oracles join syntax using (+), PostgreSQLs cast syntax using ::, relational operators like != and so on.
JSqlParser 是SQL语句分析的插件,他使用Java语言去解析SQL。
sqlparser提供很多的数据库语法解析支持其中支持很多oracle的特殊语法。
可以结合mybatis的拦截修改SQL来实现多租户、SQL拼接甚至联表的功能。
可以参考我之前写的MyBatis通过拦截修改SQL
Maven 引用
远程仓库
依赖包
SQL解析
获取SQL中的信息
创建Select的方式
创建Select(非SQL String 创建)
Insert 插入字段和值
输出:
SELECT ?, ? FROM mytable WHERE col = ?UPDATE table1 A SET A.columna = ? WHERE A.cod_table = ?INSERT INTO example (num, name, address, tel) VALUES (?, ?, ?, ?)DELETE FROM table1 WHERE col = ? AND col2 = ?
where条件中字段替换
替换条件字段col_1到col1
解析SQL例子
可以直接将String SQL片段解析成Expression再将expr插入到SQL语句中。
获取所有tableNames
自动生成别名
结果:
SELECT a AS A1, b AS A2, c AS A3 FROM test
SQL函数
单表where条件拼装
JOIN 拼装
校验SQL
Validates metadata such as names of tables, views, columns for their existence or non-existence
总结
我们可以借助JSqlparser来解析SQL并且动态拼接生成SQL,在Mybatis-plus中的租户其实也是类似这样实现的。
甚至有兴趣的同学可以自己做一个SQL拼装器,将前台筛选的条件转换为SQL进行查询。所有的查询字段、条件、联表等等都做成动态拼装。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。