A freemarker extension for spring-data to solve complex query scenarios.
user/query.sql.ftl
:
<#-- @ftlvariable name="query" type="alex.user.UserQuery" -->
select u.* from t_user u
<@repo.where>
<@repo.term active=query.q?has_content>
u.name like <@repo.param value=query.q />
</@repo.term>
<@repo.term active=query.gender?has_content>
u.gender = <@repo.param value=query.gender.valueInt />
</@repo.term>
</@repo.where>
order by u.id desc
UserRepo.java
:
public interface UserRepo extends PagingAndSortingRepository<User, Long> {
@Query(name = "user/query")
Page<User> query(UserQuery query, Pageable pageable);
}
User.java
:
public class User implements Serializable {
private static final long serialVersionUID = 1;
...
private Contact contact;
...
}
Contact.java
:
public class Contact implements Serializable {
private static final long serialVersionUID = 1;
private String address;
private String zipCode;
private String email;
private String mobile;
private String qq;
}