рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЗрдкреАрдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛

рдкрд░рд┐рдЪрдп


рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рд╕реНрдкреНрд░рд┐рдВрдЧ-рдЪрд╛рд▓рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдирдП рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЧреИрд░-рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕, рдорд╛рдирдЪрд┐рддреНрд░-рдХрдо рд░реВрдкрд░реЗрдЦрд╛, рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛рдПрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╕реБрдзрд╛рд░ред

рдпрд╣ рдЖрд▓реЗрдЦ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреА рдЙрдк-рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ - JPA рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧрд╛

рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЬреЗрдкреАрдП



рдЖрдкрдХреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ - рдЬреЗрдкреАрдП рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ

рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬрд╡рд╛рдм рджреВрдВрдЧрд╛ - рдпрджрд┐ рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЗрдкреАрдП рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд▓реЗрдпрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдореБрдЦреНрдп рд░реВрдк рд╕реЗ 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 рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛:



рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ред

рдЕрдиреБрд░реЛрдзреЛрдВ, рд╕реЙрд░реНрдЯрд┐рдВрдЧ, рднрд╛рдЧ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ


рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдЖрдкрдХреЛ рдПрдХ рдХреНрд╡реЗрд░реА рдмрдирд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рд╕рднреА рдЯреЗрд╕реНрдЯ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдЪрдпрди рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдбрдореА рдлрд╝реАрд▓реНрдб рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рд╣реИ рдФрд░ рдПрдмреАрд╕реА рдХреНрд░рдо рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдлрд╝реАрд▓реНрдб рджреНрд╡рд╛рд░рд╛ рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ:

рд╡рд┐рдХрд▓реНрдк 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 (рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд))
       ...
    }

 }


рдкреНрд░рд▓реЗрдЦрди


рд╕рднреА рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдЙрдкрдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рд╛рдЗрдЯ ред
рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рд╛рдЗрдЯ - рдЬреЗрдкреАрдП
рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рддрдХрдиреАрдХреА рджрд╕реНрддрд╛рд╡реЗрдЬ

Source: https://habr.com/ru/post/In139421/


All Articles