Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/namnv2496/springboot_jpa_criteria
this project demo criteria query by CriteriaBuilder and Specification of javax.persistence.criteria.* and org.springframework.data.jpa.domain.Specification
https://github.com/namnv2496/springboot_jpa_criteria
basic-programming criteria criteriabuilder demo-app jpa-hibernate spring-boot starter
Last synced: 7 days ago
JSON representation
this project demo criteria query by CriteriaBuilder and Specification of javax.persistence.criteria.* and org.springframework.data.jpa.domain.Specification
- Host: GitHub
- URL: https://github.com/namnv2496/springboot_jpa_criteria
- Owner: NamNV2496
- Created: 2022-08-28T08:43:54.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2023-06-12T13:05:10.000Z (over 1 year ago)
- Last Synced: 2024-11-09T02:35:16.754Z (2 months ago)
- Topics: basic-programming, criteria, criteriabuilder, demo-app, jpa-hibernate, spring-boot, starter
- Language: Java
- Homepage:
- Size: 158 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: Readme.md
Awesome Lists containing this project
README
# Criteria
preconditional:
- add new schema: `db_example` to mysqlafter run application, please run:
```sql
INSERT INTO `db_example`.`item` (`id`, `item_description`, `item_name`, `item_price`) VALUES ('1', 'item1', 'item1', '8890');
INSERT INTO `db_example`.`item` (`id`, `item_description`, `item_name`, `item_price`) VALUES ('2', 'item2', 'item2', '99');
INSERT INTO `db_example`.`item` (`id`, `item_description`, `item_name`, `item_price`) VALUES ('3', 'item3', 'item3', '100');
INSERT INTO `db_example`.`item` (`id`, `item_description`, `item_name`, `item_price`) VALUES ('4', 'item4', 'item4', '101');INSERT INTO `` (`id`,`field`,`field_type`,`value`,`item_id`) VALUES (1,'sdf',0,'344',1);
INSERT INTO `` (`id`,`field`,`field_type`,`value`,`item_id`) VALUES (2,'test',1,'34',3);INSERT INTO `db_example`.`many` (`id`, `name`, `one_id`) VALUES ('1', 'VN', '1');
INSERT INTO `db_example`.`many` (`id`, `name`, `one_id`) VALUES ('2', 'VN1', '2');```
![img_1.png](img_1.png)## FIELD TYPE
EQUAL:0
GREATER_THAN: 1
LESS_THAN: 2
LIKE: 3
ORDER_BY: 4
GROUP_BY: 5request on postman
```text
// request: sql select * from item where id=2 and item_price=8890**GET http://localhost:8080/item/custom
Content-Type: application/json[
{
"field": "id",
"value": "2"
},
{
"field": "itemPrice",
"value": "8890"
}
]// request: sql select * from item where id=1 and item_price=8890**
GET http://localhost:8080/item/custom
Content-Type: application/json[
{
"field": "id",
"value": "1"
},
{
"field": "itemPrice",
"value": "8890"
}
]// request: sql select * from item where item_price > 100 and item_name like "%tes%"
GET http://localhost:8080/item/custom
Content-Type: application/json[
{
"field": "itemPrice",
"value": "100",
"fieldType": 1 // GREATER_THAN
},
{
"field": "itemName",
"value": "tes",
"fieldType": 3 // LIKE
}
]// request: sql select * from item where item_name like "%tes%" order by item_price DESC
GET http://localhost:8080/item/custom
Content-Type: application/json[
{
"field": "itemPrice",
"value": "desc",
"fieldType": 4 // ORDER_BY
},
{
"field": "itemName",
"value": "tes",
"fieldType": 3 // LIKE
}
]// select *, count(id) from item it where item_name like "%tes%" group by item_price
[
{
"field": "itemPrice",
"value": "1",
"fieldType": 5 // GROUP_BY
},
{
"field": "itemName",
"value": "%tes%",
"fieldType": 3 // LIKE
}
]// select * from item it order by id DESC
// get page 0 with 2 elements
GET http://localhost:8080/page?page=0&size=2&sort="id",DESC@OneToOne
curl --location --request GET 'http://localhost:8080/folder/test'@OneToMany
curl --location --request GET 'http://localhost:8080/oneToMany/get'curl --location --request GET 'http://localhost:8080/folder/custom' \
--header 'Content-Type: application/json' \
--data-raw '[
{
"field": "id",
"value": "1",
"fieldType": 0 // EQUAL
},
{
"field": "itemPrice",
"value": "8890",
"fieldType": 2 // LESS_THAN
}
]''@ManyToMany
curl --location --request GET 'http://localhost:8080/oneToMany/get3'```
![img.png](img.png)## Properties:
Root: is domain (table name) from Item
CriteriaQuery: is return object (select * or select item)
CriteriaBuilder: suppor to build query[Reference link](https://topdev.vn/blog/hibernate-criteria-query-language-hcql/)
# Specifications
curl --location 'http://localhost:8080/get'
curl --location 'http://localhost:8080/subquery'
# How to escape a specification characters in java
GET http://localhost:8080/folder
we will find and add 2 '%' in before and after that character.
String name = '%' + "r_".replace("_", "%_%") + '%';
select * from folder folderquer0_ where folderquer0_.name like name![img_2.png](img_2.png)