Skip to content

Commit 4d2fdf3

Browse files
authored
Update README.md
1 parent 9307737 commit 4d2fdf3

File tree

1 file changed

+71
-21
lines changed

1 file changed

+71
-21
lines changed

README.md

Lines changed: 71 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,77 @@
11
# JPA - EXTENSION
22

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 {
411

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;
1313

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;
2317

24-
Next Version Things
18+
@Column(name = "name")
19+
private String name;
2520

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

Comments
 (0)