我们在开发过程中,会遇到需要动态拼接sql语句的情况,jsqlparser可以很好的帮我们实现
引入包
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>1.0</version>
</dependency>
一般引入了pagehelper分页组件都会有这个包,不需要再次引入
实现代码:
/**
* sql拼接where条件
* insert语句不拼接where条件,原sql返回
*
* @param type 类型 0:select,1:insert,2:update,3:delete
*/
public static String addWhereCondition(String sql, String condition, Integer type) throws Throwable {
if (type == 0) {
Select select = (Select) CCJSqlParserUtil.parse(sql);
PlainSelect plainSelect = (PlainSelect) select.getSelectBody();
final Expression expression = plainSelect.getWhere();
final Expression envCondition = CCJSqlParserUtil.parseCondExpression(condition);
if (expression == null) {
plainSelect.setWhere(envCondition);
} else {
AndExpression andExpression = new AndExpression(expression, envCondition);
plainSelect.setWhere(andExpression);
}
return plainSelect.toString();
} else if (type == 2) {
Update update = (Update) CCJSqlParserUtil.parse(sql);
final Expression expression = update.getWhere();
final Expression envCondition = CCJSqlParserUtil.parseCondExpression(condition);
if (expression == null) {
update.setWhere(envCondition);
} else {
AndExpression andExpression = new AndExpression(expression, envCondition);
update.setWhere(andExpression);
}
return update.toString();
} else if (type == 3) {
Delete delete = (Delete) CCJSqlParserUtil.parse(sql);
final Expression expression = delete.getWhere();
final Expression envCondition = CCJSqlParserUtil.parseCondExpression(condition);
if (expression == null) {
delete.setWhere(envCondition);
} else {
AndExpression andExpression = new AndExpression(expression, envCondition);
delete.setWhere(andExpression);
}
return delete.toString();
} else {
return sql;
}
}
测试:
返回信息: