|
1 | 1 | # JPA - EXTENSION |
2 | 2 |
|
3 | | -TODOs: |
| 3 | +This project look like QueryDsl but main purpuse is query creation with simple DTO (Pojo) objects. So we can simply ingrate with frontend application filters or somethings. Received query converted to Jpa Specification object and this Specification<Entity> executed on JpaSpecificationExecutor<Entity> repository. |
| 4 | + |
| 5 | +```java |
| 6 | + |
| 7 | + // Entity |
| 8 | + @Entity |
| 9 | + @Table(name = "customer") |
| 10 | + public class Customer implements Serializable { |
4 | 11 |
|
5 | | -- All Tests |
6 | | -- Convert tumple to Object (done) |
7 | | -- Extend JpaRepository (done) |
8 | | -- Spring Boot Service For Data Fetch (done) |
9 | | -- Linq For Java (done) |
10 | | -- A Repository For Linq Support (done) |
11 | | -- Parantesis Support (done) |
12 | | -- not just inner join support, all joins support (done) |
| 12 | + private static final long serialVersionUID = 1L; |
13 | 13 |
|
14 | | -customerRepository.query() <br /> |
15 | | -.select(Select("user.name", "name"), Select("user.age"), Select("name", "surname"), Select("birthdate" , " |
16 | | -birthdate"))<br /> |
17 | | -.distinct(false)<br /> |
18 | | -.where(Parantesis(Field("id").eq(3), OR, Field("user.id").eq(4), OR, Field("id").eq(5)), Parantesis(Field("id").eq(6), |
19 | | -OR, Field("id").eq(4), OR, Field("user.id").eq(5)))<br /> |
20 | | -.orderBy(OrderBy("user.name", Order.ASC))<br /> |
21 | | -.page(0, 5)<br /> |
22 | | -.getResult(User.class);<br /> |
| 14 | + @Id |
| 15 | + @GeneratedValue(strategy = GenerationType.IDENTITY) |
| 16 | + private Long id; |
23 | 17 |
|
24 | | -Next Version Things |
| 18 | + @Column(name = "name") |
| 19 | + private String name; |
25 | 20 |
|
26 | | -- Web Authorization Support. |
27 | | -- Web Rest Parameter Resolver. |
| 21 | + @Column(name = "age") |
| 22 | + private Integer age; |
| 23 | + |
| 24 | + @Column(name = "birthdate") |
| 25 | + private Instant birthdate; |
| 26 | + |
| 27 | + @ManyToOne |
| 28 | + private User user; |
| 29 | + |
| 30 | + // getter - setters |
| 31 | + } |
| 32 | + |
| 33 | + // Repository Creation |
| 34 | + @Repository |
| 35 | + public interface CustomerRepository extends JpaExtendedRepository<Customer, Long> { |
| 36 | + } |
| 37 | + |
| 38 | + // Usage |
| 39 | + // SELECT * FROM customer WHERE age >= 18 |
| 40 | + customerRepository.findAllWithCriteria(Arrays.asList(Criteria.of("age", CriteriaType.GREATER_THAN_OR_EQUAL, 18))); |
| 41 | + |
| 42 | + // Default AND operation apply on list of all criterias. |
| 43 | + // SELECT * FROM customer WHERE age >= 18 AND id < 10 |
| 44 | + customerRepository.findAllWithCriteria(Arrays.asList( |
| 45 | + Criteria.of("age", CriteriaType.GREATER_THAN_OR_EQUAL, 18), |
| 46 | + Criteria.of("id", CriteriaType.LESS_THAN, 10) |
| 47 | + )); |
| 48 | + |
| 49 | + // OR Usage |
| 50 | + // SELECT * FROM customer WHERE age >= 18 OR id < 10 |
| 51 | + customerRepository.findAllWithCriteria(Arrays.asList( |
| 52 | + Criteria.of("age", CriteriaType.GREATER_THAN_OR_EQUAL, 18), |
| 53 | + Criteria.of("", CriteriaType.OR), |
| 54 | + Criteria.of("id", CriteriaType.LESS_THAN, 10) |
| 55 | + )); |
| 56 | + |
| 57 | + // Joinning Usage |
| 58 | + // SELECT c.* FROM customer c INNER JOIN user u ON c.user_id=u.id WHERE u.surname LIKE '%son%' |
| 59 | + customerRepository.findAllWithCriteria(Arrays.asList(Criteria.of("user.surname", CriteriaType.CONTAIN, "son"))); |
| 60 | + |
| 61 | + // SELECT c.* FROM customer c LEFT JOIN user u ON c.user_id=u.id WHERE u.surname LIKE '%son%' |
| 62 | + customerRepository.findAllWithCriteria(Arrays.asList(Criteria.of("user<surname", CriteriaType.CONTAIN, "son"))); |
| 63 | + |
| 64 | + // SELECT c.* FROM customer c RIGHT JOIN user u ON c.user_id=u.id WHERE u.surname LIKE '%son%' |
| 65 | + customerRepository.findAllWithCriteria(Arrays.asList(Criteria.of("user>surname", CriteriaType.CONTAIN, "son"))); |
| 66 | + |
| 67 | + |
| 68 | + // Powerfull Usage |
| 69 | + // SELECT c.* FROM customer c INNER JOIN user u ON c.user_id=u.id WHERE (u.surname LIKE '%son%' AND c.age >= 18) OR (u.name LIKE '%ander%' AND c.id < 10) |
| 70 | + customerRepository.findAllWithCriteria(Arrays.asList( |
| 71 | + Criteria.of("user.surname", CriteriaType.CONTAIN, "son"), |
| 72 | + Criteria.of("age", CriteriaType.GREATER_THAN_OR_EQUAL, 18), |
| 73 | + Criteria.of("", CriteriaType.OR), |
| 74 | + Criteria.of("user.name", CriteriaType.CONTAIN, "ander"), |
| 75 | + Criteria.of("id", CriteriaType.LESS_THAN, 10) |
| 76 | + )); |
| 77 | +``` |
0 commit comments