感觉你这个condition表没什么用啊?仅仅是存储数据?如果临时的直接用json传过来就好了,如果你要持久存储的话,起码要个admin_id什么的,来标记下是谁的筛选条件。感觉效率不如直接扔到redis好点。
看你用的是Java,不过我习惯用PHP,就用PHP简单描述下我的思路吧...
写一个Filter类处理condition转换为sql。
class Filter {
public function doFilter() {
//1. 获取登录的admin_id
//2. 获取筛选条件
/**
* 数据格式例子为: [
* 'field' => 'age';,
* 'type' => 'compare',
* 'ext' => '>',
* 'value' => '2'
* ]
*/
foreach($conditions as $condition) {
// 根据type获取对应的$conditionHandle
$conditionHandle::parse($condition);
}
}
}
// Condition接口
interface Condition {
// 解析数据,返回sql片段和需要填充的数据(此处使用PDO预处理,减少SQL注入)
static function parse($data);
}
// ConditionHandle
namespace Condition;
class Compare implements Condition {
// 执行流程
public static function parse($data) {
...
return [
'sql' => 'age > ?',
'params' => [ 2 ]
];
}
}
手写的,语法错误请忽略...