This code generate where clause using custom visitor and RSQL library.
-
Annotate classes with @Table, @Column and @JoinColumn
-
Create AnnotationSqlColumnMap class
-
Use AnnotationSqlColumnMap object to create BaseRSQLVisitor
Node node = RSQLParserBuilder.newRSQLParser().parse(query); SqlColumnMap annotationSqlColumnMap = new AnnotationSqlColumnMap(User.class); String whereClause = node.accept(new BaseRSQLVisitor(annotationSqlColumnMap));
-
Create implementation of SqlColumnMap
-
Use SqlColumnMap implementation object to create BaseRSQLVisitor
Node node = RSQLParserBuilder.newRSQLParser().parse(query); SqlColumnMap sqlColumnMap = new SqlColumnMap() { @Override public Map<String, SqlColumnMetadata> getSqlColumnMap() { Map<String, SqlColumnMetadata> sqlColumnMap = new HashMap<>(); sqlColumnMap.put("name", new SqlColumnMetadata("USER.USER_NAME", String.class)); sqlColumnMap.put("age", new SqlColumnMetadata("USER.AGE", int.class)); sqlColumnMap.put("indian", new SqlColumnMetadata("USER.IS_INDIAN", boolean.class)); sqlColumnMap.put("addresses.country.code", new SqlColumnMetadata("USER_ADDRESS_COUNTRY.CODE", String.class)); return sqlColumnMap; } }; String whereClause = node.accept(new BaseRSQLVisitor(sqlColumnMap));