рднреВрд▓ рдЧрдП рдореБрд╕реАрдмрддреЗрдВ,
рджреМрдбрд╝рдирд╛ рдмрдВрдж рд╣реЛ рдЧрдпрд╛
рд░реЛрдмреЛрдЯ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛
рдЦреБрд╢ рдЖрджрдореА!
рдлрд┐рд▓реНрдо рд╕реЗ "рдмрдЪрдкрди рдЯрд░реНрдорд┐рдиреЗрдЯрд░" "рдПрдбрд╡реЗрдВрдЪрд░ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕"
рдирдорд╕реНрддреЗ, рдЖрдЬ рд╣рдо рдлрд┐рд░ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
рдореИрдВ рдЗрд╕ рдХреМрд╢рд▓ рдХреЛ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреИрд╕реЗ рдкрдВрдк рдХрд░реВрдВ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░реЗ рд╕реБрдЭрд╛рд╡ рдХрд╛рдо рдЖрдПрдВрдЧреЗ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рд╕реБрдзрд╛рд░реЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!
рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдбреЗрд╡рд▓рдкрд░ рдЕрдкрдиреЗ рдХрд╛рдордХрд╛рдЬреА рджрд┐рди рдХрд╛ рдХрд╛рдлреА рд╣рд┐рд╕реНрд╕рд╛ рдирд┐рдпрдорд┐рдд рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдмрд┐рддрд╛рддрд╛ рд╣реИред рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рддрдХ рдореИрдВрдиреЗ рднреА рдЕрднрд┐рдирдп рдХрд┐рдпрд╛ рдерд╛ред рдФрд░ рдлрд┐рд░ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдЪрд╛рд░ рдЙрддреНрдкрдиреНрди рд╣реБрдП:
- рдЕрдХреНрд╕рд░ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдирдпрд╛ рдФрд░ рдЕрд╕рд╛рдорд╛рдиреНрдп рд▓рд┐рдЦрддреЗ рд╣реИрдВ
- рдХрд╛рд░реНрдп рд╕рдордп рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛, рдбреЗрд╡рд▓рдкрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛрдб рд▓рд┐рдЦрддрд╛ рд╣реИ
- рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рд╕рд░рд▓ рдирд┐рд░реНрдорд╛рдг рдЖрд╕рд╛рдиреА рд╕реЗ рдФрдкрдЪрд╛рд░рд┐рдХ рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рд╕рд┐рд░ рдореЗрдВ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рде рд╡реНрдпрдХреНрдд рдХрд░рддреЗ рд╣реИрдВ
рдЬрдм рдореИрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрде / рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд╢реЗрд░ рдХреА рд╣рд┐рд╕реНрд╕реЗрджрд╛рд░реА, рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдкреАрдврд╝реА рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЙрдиреНрд╣реЗрдВ рдЪрд┐рдВрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИ рдФрд░ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдерд┐рдПрдЯрд░ рдПрдХ рд╣реИрдВрдЧрд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрде рдРрдк рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рд╡реЗ рдлрд╝рд╛рдЗрд▓ application.yml
/ application.properties
рдореЗрдВ рд╕рд╛рдЗрди рдЗрди рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдмреАрдиреНрд╕ / рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ:
@Configuration @EnableSwagger2 class SwaggerConfig { @Bean Docket documentationApi() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build(); } }
рдЗрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рд╕реНрд╡реИрдЧрд░ (рдЦреЗрдд рдкрд░ рдПрдХ рдЙрдкрдпреЛрдЧреА рд╡рд╕реНрддреБ) рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ @Configuration
рдХреЛ рд╕реЗрдЯрд┐рдВрдЧ рд╡рд░реНрдЧ рдХреЗ рдКрдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╛рдиреА рдЖрдк рдПрдХ рддрд░рд╣ рдХрд╛ рдмреНрд▓реИрдВрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ рдЗрд╕реЗ рдХрд▓рд╛рдИ рдХреЗ рдлреНрд▓рд┐рдХ рдХреЗ рд╕рд╛рде рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ "рдЖрдЗрдбрд┐рдпрд╛" рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рддрд╛ рд╣реИ:

рд╣рдо рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end import org.springframework.context.annotation.Configuration; @Configuration class ${NAME} { }
рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВ рд╕рдордЭрд╛рдКрдВрдЧрд╛:
рдкрдВрдХреНрддрд┐ 1: рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдирдП рдмрдирд╛рдП рдЧрдП рд╡рд░реНрдЧ рдХреЗ рдХреЛрдб рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛
package com.example.-;
рдкрдВрдХреНрддрд┐ 2: рд╡рд╛рдВрдЫрд┐рдд рдПрдиреЛрдЯреЗрд╢рди рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
рдкрдВрдХреНрддрд┐ 3: рд╢рд░реАрд░ рд╡рд░реНрдЧред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЪрд░ ${NAME}
рдПрдХ рдкреЙрдк-рдЕрдк рд╡рд┐рдВрдбреЛ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рдЬрд╣рд╛рдБ рд╣рдореЗрдВ рдХрдХреНрд╖рд╛ рдХрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдХреБрд▓:

рдпрд╣ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣рдореЗрдВ @Configuration
рд╣рд╛рдереЛрдВ рд╕реЗ рдПрдХ рд╡рд░реНрдЧ рдкрд░ @Configuration
рд▓рд┐рдЦрдиреЗ рдФрд░ рдЖрдпрд╛рдд рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИред рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╣рдо рдХреБрдЫ рдЕрдиреБрднрд╡ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рдПрдХ рдЦрд╛рд▓реА рд╕реЗрдЯрд┐рдВрдЧ рдХреНрд▓рд╛рд╕ рдЕрдХреЗрд▓реЗ рдХрдо рдореВрд▓реНрдп рдХреА рд╣реИред рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмрд┐рдирд╛ рдмреАрдиреНрд╕ рдХреИрд╕реЗ рдмрдирд╛рдПрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдкрд╛рджрдХ> рдлрд╝рд╛рдЗрд▓ рдФрд░ рдХреЛрдб рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ , рд╕рдВрдкрд╛рджрдХ> рд▓рд╛рдЗрд╡ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкрд░ рдЬрд╛рдПрдВ ред рдпрд╣рд╛рдВ рдЖрдк рдЯрд╛рдЗрдк рдХрд░рдХреЗ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдкреИрдЯрд░реНрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ, рдореИрдВрдиреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЙрдк-рдкреНрд░рдЬрд╛рддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ред рдЗрд╕рдореЗрдВ рд╣рдо рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ:
@Bean public $CLASS_NAME$ $mthdName$() { return new $CLASS_NAME$($END$); }
CLASS_NAME
рдЪрд░ рдХреЛ рдкреЙрдк-рдЕрдк рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░, рд╕реАрдзреЗ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдзрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдЪрд░ mthdName
, рдмрд┐рд▓реНрдЯ-рдЗрди рдореЗрдердб camelCase()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ CLASS_NAME
рдХрд╛ рдорд╛рди рд╣реИред рд╕реЗрдЯрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдЪрд░ рдореЗрдВ рд╣реЛрддреА рд╣реИ :

рдЪрд░ $END$
рдорддрд▓рдм рд╣реИ рдХрд┐ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкреЙрдЗрдВрдЯрд░ рдХреА рд╕реНрдерд┐рддрд┐ред рд╣рдорд╛рд░реЗ рдмреАрди рдореЗрдВ рд╕рдВрднрд╡рддрдГ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ (рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ) рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдЙрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдмрд╛рдпрд░реНрд╕ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ:

рдЕрдм рдЪрд▓реЛ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ рдХреЗ рдЖрд╡реЗрджрди рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдРрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рд░реЛрдЬрд╝рдорд░реНрд░рд╛ рдХреЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреНрдпрд╛ рдЧрддрд┐ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред
рд╕реЗрд╡рд╛
рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреА, рдЬрд┐рдирдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕реНрдерд╛рди рд╕реЗ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рднрдЯрдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╡рд╕рдВрдд рд╕реЗрд╡рд╛ рд╢рд╛рдпрдж рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд▓реЗрди-рджреЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ) рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рд▓реЙрдЧрд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рд╣рд░ рдмрд╛рд░ рдирд╡рдирд┐рд░реНрдорд┐рдд рд╡рд░реНрдЧ рдкрд░ рд╕рднреА рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end #parse("File Header.java") import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @Log4j2 @Service @Transactional @RequiredArgsConstructor public class ${NAME} { }
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ:

рдЗрд╕рдХреЗ рдмрд╛рдж рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдШреГрдгрд┐рдд рд╕реВрдЪреА рдЖрддреА рд╣реИред рдКрдкрд░, рд╣рдордиреЗ рдмреАрди рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд camelCase()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд╡реЗ рдлрд╝реАрд▓реНрдб рдирд╛рдо рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

private final $CLASS_NAME$ $fieldName$; $END$
рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ Ctrl + Alt + L (рд╕рдВрд░реЗрдЦрдг) рдирд╣реАрдВ рджрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯрд╛рдЗрд▓ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░рд┐рдлрд╝реЙрд░реНрдореЗрдЯ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд░реЗрдЧрд╛:

рднрдВрдбрд╛рд░ рдФрд░ рд╕рдВрд╕реНрдерд╛рдПрдБ
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдВрд╕реНрдерд╛рдУрдВ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдЖрдпрд╛рдд рдПрдиреЛрдЯреЗрд╢рди рд╣реИрдВред рдЖрдк рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end #parse("File Header.java") import lombok.Getter; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Getter @Table @Entity public class ${NAME} { @Id private Long id; }

2019 рдореЗрдВ, рдпрджрд┐ рдЖрдк рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдк рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдЗрдП рдЙрдирдХреА рд░рдЪрдирд╛ рдХреЛ рдЧрддрд┐ рджреЗрдВ:
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end #parse("File Header.java") import org.springframework.data.jpa.repository.JpaRepository; public interface ${Entity_name}Repository extends JpaRepository<${Entity_name}, ${Key}>{ }

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░, рдЗрдХрд╛рдИ рдкрд░ рдХрд░реНрд╕рд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп (рд╡рд░реНрдЧ @Entity
рдФрд░ @Table
@Entity
рдЪрд┐рд╣реНрдирд┐рдд) рдФрд░ Alt + Enter рджрдмрд╛рддреЗ рд╣реБрдП , "рдЖрдЗрдбрд┐рдпрд╛" рддреБрд░рдВрдд рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рд╕реНрдорд╛рд░реНрдЯ рдирд╣реАрдВ рд╣реИ :)ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдЗрд░рд╛рджреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ / рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИ ( рд╕рдВрдкрд╛рджрдХ> рдЗрд░рд╛рджреЗ ), рд▓реЗрдХрд┐рди рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

рдкрд░реАрдХреНрд╖рдг
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдЕрдзрд┐рдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИ, рд╕реНрд╡рдЪрд╛рд▓рди рд▓рд╛рдн рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрддрд╛ рд╣реИред рдХрд╛рдо рдХреЗ рд╕рдмрд╕реЗ рджреЛрд╣рд░рд╛рдпрд╛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВред рдЬреЛ рд▓реЛрдЧ рд╕рд┐рд░рд┐рд▓ рдЯреЛрд▓рд╛рдЪреЗрд╡ "рдж рдХрд░реНрд╕ рдСрдл рдж рд╕реНрдкреНрд░рд┐рдВрдЧ рдЯреЗрд╕реНрдЯ" рдХреА рд░рд┐рдкреЛрд░реНрдЯ рджреЗрдЦрддреЗ рдереЗ, рд╡реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╕рдВрджрд░реНрдн рд╡реГрджреНрдзрд┐ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ: рдПрдХ рд╕рд╛рд░ рд╡рд░реНрдЧ рдмрдирд╛рдирд╛ рдФрд░ рдЙрд╕рд╕реЗ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдирд╛ред
рдХреБрдЫ рдРрд╕рд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛
package com.example; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import org.springframework.test.context.junit.jupiter.SpringExtension; @Transactional @SpringBootTest @ExtendWith(SpringExtension.class) public abstract class BaseTest { }
рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рднреА рдирдП рдмрдирд╛рдП рдЧрдП рдкрд░реАрдХреНрд╖рдг рд╡рд╛рд░рд┐рд╕ BaseTest
рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛:

рдХреЛрдб рдореЗрдВ:
import com.example.BaseTest; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; #parse("File Header.java") class ${NAME} extends BaseTest { ${BODY} }
рдЖрдЧреЗ рд╣рдо рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рд╣рд░ рдмрд╛рд░ рдбрд╛рдпрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛
@Autowired private MyService service;
рдЗрд╕рд▓рд┐рдП, рдЕрдиреБрднрд╛рдЧ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ> рд▓рд╛рдЗрд╡ рдЯреЗрдореНрдкрд▓реЗрдЯ, рд▓рд┐рдЦреЗрдВ
@Autowired private $CLASS_NAME$ $fieldName$; $END$
рдЪрд░ $fieldName$
рд╡рд░реНрдгрди рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреИрд╕реЗ рдмреАрди рдмрдирд╛рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде: рдлрд╝реАрд▓реНрдб рдмрдирд╛рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдХрд░реНрд╕рд░ рдЙрд╕ рдкрд░ рд╕реНрд╡рд┐рдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ :

рдореВрд▓ рд░реВрдк рд╕реЗ, @Autowired
рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбреНрд░реЙрдк-рдбрд╛рдЙрди рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдШреЛрд╖рдгрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ:

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ:

рд╡реИрд╕реЗ, рдЬрдм рд╕реЗ рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( toCamelCase()
рдпрд╣рд╛рдБ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рддреБрд░рдВрдд рд╡реЗрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ):
import com.example.demo.BaseTest; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; #parse("File Header.java") class ${NAME} extends BaseTest { #set($bodyLength = $NAME.length() - 4) #set($field = $NAME.substring(0, 1).toLowerCase() + $NAME.substring(1, $bodyLength)) @Autowired private ${CLASS_NAME} ${field}; ${BODY} }

рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдХреНрд░реЙрд╕-рдХрдЯрд┐рдВрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдПрдХ рд╕реЗрд╡рд╛ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рдЗрдХрд╛рдИ рдХреЛ рдирд┐рдХрд╛рд▓рддреА рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдХрд┐рд╕реА рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХрд╛рдЯ рджреЗрддреА рд╣реИ, рддреЛ рднреА рдЗрдХрд╛рдИ рдХреЛ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗред рдЗрд╕рд▓рд┐рдП, рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рдИрдорд╛рдирджрд╛рд░ рдбреЗрдЯрд╛ рд▓реЗрддрд╛ рд╣реВрдВ рдФрд░ @Sql
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рд▓реЛрдб рдХрд░рддрд╛ @Sql
ред
рдбреЗрдЯрд╛ рдХрд╛ рдирдореВрдирд╛ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╣рд╛рде рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ, рд╕рдВрдкрд╛рджрдХ> рд▓рд╛рдЗрд╡ рдЯреЗрдореНрдкреНрд▓реЗрдЯ , JUnit рдЕрдиреБрднрд╛рдЧ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд▓рд┐рдЦреЗрдВ:
@Sql("/sql/$CLASS_NAME$.sql") $END$

рдЕрдм, sql
рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдкрд░, рд╣рдореЗрдВ 1 рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рде рдбреНрд░реЙрдкрдбрд╛рдЙрди рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЪрдпрди рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
@Sql("/sql/MyEntityRepositoryTest.sql") class MyEntityRepositoryTest extends BaseTest { }
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдЬрд┐рд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдЕрднреА рддрдХ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХреЛ рдХрдЪреНрдЪреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рдВрд╕реНрдХрд░рдг 193.1617 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реБрдП , рдЖрдЗрдбрд┐рдпрд╛ рдиреЗ рдПрдХ рдиреЙрдирд╡реЗрдЬ рдлрд╛рдЗрд▓ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ!

рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕
рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ (рд╕рдорд╛рдкреНрддрд┐) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХрд╛ рдирд┐рд░реНрдорд╛рдг / рдЬреЛрдбрд╝ рд╣реИред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг:

рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреВрд░реНрдгрддрд╛рдПрдВ рд╣реИрдВ, рдЖрдк рдЙрди рд╕рднреА рдХреЛ рд╕рдВрдкрд╛рджрдХ> рд╕рд╛рдорд╛рдиреНрдп> рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ рд╕рдорд╛рдкрди рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

рдХрдИ рддрд░рд╣ рдХреЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рднреА рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реИред рдЦреБрдж рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдЪрд░ рдХреЛ AssertJ- рдЖрдзрд╛рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ рдХрд┐рдпрд╛:

рдЬреАрд╡рди рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

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