Если вы используете аннотации Spring Data и @NamedQuery в вашей сущности JPA, вы можете легко использовать их более удобным способом с помощью репозитория данных Spring.
В предыдущем блоге мы создали проект данных Spring, используя Spring Boot и Docker. Мы будем использовать тот же проект и расширять функциональность нашего репозитория.
Мы реализуем именованный запрос, который будет вызывать сотрудников только в том случае, если их фамилия содержит столько символов, сколько указано.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
package com.gkatzioura.springdata.jpa.persistence.entity;import javax.persistence.*;/** * Created by gkatzioura on 6/2/16. */@Entity@Table(name = "employee", schema="spring_data_jpa_example")@NamedQuery(name = "Employee.fetchByLastNameLength", query = "SELECT e FROM Employee e WHERE CHAR_LENGTH(e.lastname) =:length ")public class Employee { @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.SEQUENCE) private Long id; @Column(name = "firstname") private String firstName; @Column(name = "lastname") private String lastname; @Column(name = "email") private String email; @Column(name = "age") private Integer age; @Column(name = "salary") private Integer salary; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Integer getSalary() { return salary; } public void setSalary(Integer salary) { this.salary = salary; }} |
Обратите особое внимание на имя запроса и соглашение, которому мы следуем @ {EntityName}. {QueryName}.
Затем мы добавим этот метод в наш репозиторий данных Spring.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
package com.gkatzioura.springdata.jpa.persistence.repository;import com.gkatzioura.springdata.jpa.persistence.entity.Employee;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.repository.query.Param;import org.springframework.stereotype.Repository;import java.util.List;/** * Created by gkatzioura on 6/2/16. */@Repositorypublic interface EmployeeRepository extends JpaRepository<Employee,Long>, EmployeeRepositoryCustom { List<Employee> fetchByLastNameLength(@Param("length") Long length);} |
И последнее, но не менее важное: добавьте некоторые функциональные возможности в наш контроллер
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package com.gkatzioura.springdata.jpa.controller;import com.gkatzioura.springdata.jpa.persistence.entity.Employee;import com.gkatzioura.springdata.jpa.persistence.repository.EmployeeRepository;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import java.util.List;/** * Created by gkatzioura on 6/2/16. */@RestControllerpublic class TestController { @Autowired private EmployeeRepository employeeRepository; @RequestMapping("/employee") public List<Employee> getTest() { return employeeRepository.findAll(); } @RequestMapping("/employee/filter") public List<Employee> getFiltered(String firstName,@RequestParam(defaultValue = "0") Double bonusAmount) { return employeeRepository.getFirstNamesLikeAndBonusBigger(firstName,bonusAmount); } @RequestMapping("/employee/lastnameLength") public List<Employee> fetchByLength(Long length) { return employeeRepository.fetchByLastNameLength(length); }} |
Вы можете найти исходный код на github .
| Ссылка: | Spring Data с JPA и @NamedQueries от нашего партнера по JCG Эммануила Гкациоураса в блоге gkatzioura . |