рдкрд░рд┐рдЪрдп
рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рд╕реНрдкреНрд░рд┐рдВрдЧ-рдЪрд╛рд▓рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдирдП рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЧреИрд░-рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕, рдорд╛рдирдЪрд┐рддреНрд░-рдХрдо рд░реВрдкрд░реЗрдЦрд╛, рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛рдПрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╕реБрдзрд╛рд░ред
рдпрд╣ рдЖрд▓реЗрдЦ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреА рдЙрдк-рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ - JPA рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧрд╛
рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЬреЗрдкреАрдП
- рд╕реНрдкреНрд░рд┐рдВрдЧ рдФрд░ рдЬреЗрдкреАрдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЧрдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдмрдирд╛рдирд╛ рдФрд░ рдмрдирд╛рдП рд░рдЦрдирд╛
- QueryDSL рдФрд░ JPA рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
- рдбреЛрдореЗрди рдХреНрд▓рд╛рд╕ рдСрдбрд┐рдЯ
- рдмреИрдЪ рд▓реЛрдбрд┐рдВрдЧ, рд╕реЙрд░реНрдЯрд┐рдВрдЧ, рдбрд╛рдпрдирд╛рдорд┐рдХ рдХреНрд╡реЗрд░реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
- рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП XML рдореИрдкрд┐рдВрдЧ рд╕рдорд░реНрдерди
рдЖрдкрдХреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ - рдЬреЗрдкреАрдП рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ
рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬрд╡рд╛рдм рджреВрдВрдЧрд╛ - рдпрджрд┐ рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЗрдкреАрдП рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд▓реЗрдпрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдореБрдЦреНрдп рд░реВрдк рд╕реЗ CRUD рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдЖрдк рдЕрдореВрд░реНрдд DAO, рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕ рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ - JPA рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред
рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ
рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕реЗ рдЬреБрдбрд╝рд╛ рдПрдХ рдорд╛рд╡реЗрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ, рдЬреЛ рдХрд┐ EntityManager рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИред
1. рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ - рдЬреЗрдкреАрдП рдХреЗ рд╕рд╛рде рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ
<рдирд┐рд░реНрднрд░рддрд╛>
<groupId> org.springframework.data </ тАЛтАЛgroupId>
<рд╡рд┐рд░реВрдкрдг рд╕рд╛рдХреНрд╖реНрдп> рд╡рд╕рдВрдд-рдбреЗрдЯрд╛-рдЬрдкрд╛ </ рд╡рд┐рд░реВрдкрдг рд╕рд╛рдХреНрд╖реНрдп>
<рд╕рдВрд╕реНрдХрд░рдг> 1.0.2.RELEASE </ рд╕рдВрд╕реНрдХрд░рдг>
</ рдирд┐рд░реНрднрд░рддрд╛>
2. рдЕрдкрдиреЗ ApplicationContext.xml рдореЗрдВ рдЖрдкрдХреЛ рдЙрд╕ рд░рд╛рд╕реНрддреЗ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдЖрдкрдХреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
<jpa: рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмреЗрд╕-рдкреИрдХреЗрдЬ = "com.test.repository" />
3. рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдХрд╛рдИ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдБ
рдкреИрдХреЗрдЬ com.test.entity;
...
@Entity
рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рдЯреЗрд╕реНрдЯ {
@Id
@GeneratedValue (рд░рдгрдиреАрддрд┐ = GenerationType.AUTO)
@ рдХреЙрд▓рдо (рдирд╛рдо = "рдЖрдИрдбреА")
рдирд┐рдЬреА рд▓рдВрдмреА рдЖрдИрдбреА;
рдирд┐рдЬреА рдмреВрд▓рд┐рдпрди рдбрдореА;
рдирд┐рдЬреА рдЗрдВрдЯ рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ;
...
}
рдкреИрдХреЗрдЬ com.test.repository;
рдЖрдпрд╛рдд org.springframework.data.repository.rud.epository;
рдЖрдпрд╛рдд com.test.entity.Test;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ TestRepository рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ CrudRepository <Test, Long> {}
4. рдЕрдм рдЖрдк рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ TestServiceImpl рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ TestService {
@Autowired
TestRepository testRepository;
...
}
CrudRepository рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛:
- рд╕реЗрд╡
- findOne
- рдореМрдЬреВрдж рд╣реИ
- findAll
- рдЧрд┐рдирддреА
- рд╣рдЯрд╛рдирд╛
- deleteAll
рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ред
рдЕрдиреБрд░реЛрдзреЛрдВ, рд╕реЙрд░реНрдЯрд┐рдВрдЧ, рднрд╛рдЧ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдЖрдкрдХреЛ рдПрдХ рдХреНрд╡реЗрд░реА рдмрдирд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рд╕рднреА рдЯреЗрд╕реНрдЯ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдЪрдпрди рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдбрдореА рдлрд╝реАрд▓реНрдб рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рд╣реИ рдФрд░ рдПрдмреАрд╕реА рдХреНрд░рдо рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдлрд╝реАрд▓реНрдб рджреНрд╡рд╛рд░рд╛ рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ:
рд╡рд┐рдХрд▓реНрдк 1:
@Query ("FROM рдЯреЗрд╕реНрдЯ рдЬрд╣рд╛рдВ рдбрдореА =; 1 рдЖрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ ASC рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ")
рд╕реВрдЪреА <рдЙрддреНрдкрд╛рдж> findTests (рдмреВрд▓рд┐рдпрди рдбрдореАрд╡реЗрд▓);
рдпрд╛ рд╡рд┐рдХрд▓реНрдк 2:
рд╕реВрдЪреА <рдкрд░реАрдХреНрд╖рдг> findByDummyOrderByTriesAsc (рдмреВрд▓рд┐рдпрди рдбрдореАрд╡реЗрд▓);
рдпрджрд┐ рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рдкрд░рд┐рдЪрд┐рдд рдЕрдиреБрд░реЛрдз рд╣реИ, рддреЛ рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдмрдирд╛рдирд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ рд╕реЗ рдореИрдВ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреИрд╕реЗ: "рдвреВрдВрдвреЗрдВ", "рдСрд░реНрдбрд░", рдЪрд░ рдХрд╛ рдирд╛рдо, рдЖрджрд┐ред рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ - рдЬреЗрдкреАрдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЙрди рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдЬрд┐рдирдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдФрд░ рдорд╛рдирджрдВрдб
рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрдЯрд┐рд▓ рдкреНрд░рд╢реНрди рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬрд┐рд╕рдореЗрдВ, "рд░рд┐рдЯреНрд░реАрдЬрд╝" рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╡рд┐рднрд┐рдиреНрди "рдбрдореА" рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЕрдВрддрд┐рдо рд╡рд░реНрдЧ TestSpecs {
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ <рдкрд░реАрдХреНрд╖рдг> рдЪреЗрдХрд░реАрдЯреНрд╕ (рдЕрдВрддрд┐рдо рдЗрдВрдЯ рд░рд┐рдЯ) {
рдирдпрд╛ рд╡рд┐рд╡рд░рдг рд▓реМрдЯрд╛рдПрдВ <Test> () {
@Override
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ PrPatePatePate (рдореВрд▓ <рдЯреЗрд╕реНрдЯ> рд░реВрдЯ, CriteriaQuery <?> рдХреНрд╡реЗрд░реА, CriteriaBuilder) DB) {
рдЕрдЧрд░ (рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕> 10) {
рд╡рд╛рдкрд╕реА cb.equal (root.get ("рдбрдореА"), рдЧрд▓рдд);
} {
рд╡рд╛рдкрд╕реА cb.equal (root.get ("рдбрдореА"), рд╕рдЪ);
}
}
};
}
}
рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ рдЖрдк рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
JpaSpecificationExecutor рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ TestRepository CrudRepository <Test, Long>, JpaSpecificationExecutor <Test> {} рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ
рдФрд░ findAll рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдЬреЛ рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ TestServiceImpl рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ TestService {
@Autowired
TestRepository testRepository;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп doTest () {
int рд░рд┐рдЯреНрд░реАрдЬрд╝ = 5;
рд╕реВрдЪреА <рдкрд░реАрдХреНрд╖рдг> рдкрд░рд┐рдгрд╛рдо = testRepository.findAll (рдирд┐рд░реНрджрд┐рд╖реНрдЯреАрдХрд░рдг.where (TestSpecs.checkRetries (рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд))
...
}
}
рдкреНрд░рд▓реЗрдЦрди
рд╕рднреА рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдЙрдкрдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рд╛рдЗрдЯ ред
рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рд╛рдЗрдЯ - рдЬреЗрдкреАрдПрд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рддрдХрдиреАрдХреА рджрд╕реНрддрд╛рд╡реЗрдЬ