рдЬрд╛рд╡рд╛ 8, рд╕реНрдкреНрд░рд┐рдВрдЧ, рд╣рд╛рдЗрдмрд░рдиреЗрдЯ, рдПрд╕рдПрд╕рдкреА - рд╢реБрд░реВ рд╣реЛ рд░рд╣рд╛ рд╣реИ

рдЕрднреА рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЬрд╛рд╡рд╛ 8 рдмрд╛рд╣рд░ рдЖрдпрд╛ рдерд╛ред рдФрд░ рдореЗрд░реА рдЗрдЪреНрдЫрд╛ рдереА рдХрд┐ gives-рдпрд╛рд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдирдИ рдЕрдЪреНрдЫрд╛рдЗрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЬрд╛рдПред

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



рдпрд╣ рдЖрд▓реЗрдЦ рдЬрд╛рд╡рд╛ 8, рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА, рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдФрд░ рдПрд╕рдПрд╕рдкреА рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрди рд╣реИред



рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ, рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИред



рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛



рд▓рдВрдмреЗ рд╕рдордп рддрдХ (рдФрд░ рдЕрднреА рднреА) рдореИрдВ рд╕реНрдХрд╛рд▓рд╛ рднрд╛рд╖рд╛ рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореЗрд░рд╛ рдорд╕реНрддрд┐рд╖реНрдХ, рдЙрджреНрдпрдо рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рд╕рдВрддреГрдкреНрдд рд╣реИ, рдлрд┐рд░ рднреА рдореБрдЭреЗ рд╢реБрджреНрдз рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ (рд╣рд╛рдЗрдмрд░рдиреЗрдЯ, рд╕реНрдкреНрд░рд┐рдВрдЧ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА) рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдЬреЛ рдореБрдЭреЗ рдЕрднреА рднреА рдПрдХ рдХрдордЬреЛрд░реА рд╣реИред

рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рд╕реНрдХрд╛рд▓рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛рддрд╛рд░ рдзрд╛рд░рдгрд╛ рдорд┐рд▓рддреА рд╣реИ рдХрд┐ рдЖрдк рд▓рдЧрд╛рддрд╛рд░ рдмреИрд╕рд╛рдЦреА рдФрд░ рдкреНрд░реЙрдкреНрд╕ рд░рдЦ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╕реНрдХреИрд▓рд╛ рд╢реИрд▓реА рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ,

рдмрд▓реНрдХрд┐, рдЖрдк рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реНрдХреИрд▓рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ + рдмреИрд╕рд╛рдЦреА рдФрд░ рд╕реНрдХреИрдк рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдЬрд╛рд╡рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдирд┐рд╣рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░реЙрдкреНрд╕ рдФрд░ рдкреНрд░реЙрдкреНрд╕ред



рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдХреБрдЫ рдФрд░ "рдирд░рдо" рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдиреЗ рдФрд░ рдкрд░рд┐рдЪрд┐рдд рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред JSP (рдЬрд╛рд╡рд╛ рд╕рд░реНрд╡рд░ рдкреЗрдЬ) рдХреЗ рдмрдЬрд╛рдп рдПрд╕рдПрд╕рдкреА (рд╕реНрдХрд╛рд▓рд╛ рд╕рд░реНрд╡рд░ рдкреЗрдЬ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрджрд▓рд╛рд╡ рдЖрдпрд╛ рд╣реВрдВ,

рджреГрд╢реНрдп рдкрдХреНрд╖ рдкрд░ рд╕реНрдерд┐рд░ рд╕рдорд░реНрдерди рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдмрдбрд╝рд╛ рд╕рд┐рд░рджрд░реНрдж рди рд╣реЛ

рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕реЗ рддреИрдирд╛рддреА рдХреЗ рдмрд╛рдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ (рдЬрдм рдХреБрдЫ рдмреНрд▓реЙрдХ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдЦрд░рд╛рдм рдХрд░ рджреЗрдЧрд╛)



рд╢реБрд░реБрдЖрдд



рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред



рд╣рдо рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдорд╛рд╡реЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред



рдЖрдЗрдП рдорд╛рд╡реЗрди рдХреЛ рд╕рдВрдХреЗрдд рджреЗрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЬрд╛рд╡рд╛ 8 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧреА:

... <build> <plugins> ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <executions> <execution> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> </executions> <configuration> <_source>1.8</_source> <target>1.8</target> </configuration> </plugin> ... </plugins> </build> ...
      
      







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

 <dependencies> ... <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> </dependency> <dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.0-api</artifactId> </dependency> <!-- Scalate (SSP) support--> <dependency> <groupId>org.fusesource.scalate</groupId> <artifactId>scalate-core_2.10</artifactId> </dependency> <dependency> <groupId>org.fusesource.scalate</groupId> <artifactId>scalate-spring-mvc_2.10</artifactId> </dependency> ... </dependencies>
      
      







рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдЬреЛ рдореБрдЭреЗ рд╕рд╛рдордиреЗ рдЖрдИ рд╡рд╣ рд╣реИ рд╕реНрдХреИрд▓рд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреА рдЕрд╕рдВрдЧрддрд┐, рдЬреЛ рдХрд┐ рд╕реНрдХреИрд▓реЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ (рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрд╕рдПрд╕рдкреА рд╕рдкреЛрд░реНрдЯ рд╣реИ) рдЬрд╛рд╡рд╛ 8 рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЗ рд╕рд╛рдеред

рдореБрдЭреЗ рд╕реНрдХреИрд▓рд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдерд╛, рддрд╛рдХрд┐ рд╕рдм рдХреБрдЫ рдмрдВрдж рд╣реЛ рдЬрд╛рдП:



 <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-compiler</artifactId> <version>2.10.4</version> </dependency>
      
      







// рдореВрд▓ рд░реВрдк рд╕реЗ 2.11 рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╣рд┐рдореНрдордд рдмрд╣реБрдд рдмрджрд▓ рдЧрдИ рд╣реИ рдФрд░ рд╕реНрдХреИрд▓реЗрдЯ рдХреЗ рдирд╡реАрдирддрдо рдЙрдкрд▓рдмреНрдз рд╕рдВрд╕реНрдХрд░рдг (1.6.1) рдореЗрдВ рдпрд╣ рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред



рд╣рдо рдпрд╣ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдПрд╕рдПрд╕рдкреА рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рд╣реЛрдВ рдФрд░ рд╣рдо рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦреЗрдВ, рди рдХрд┐ рдЙрддреНрдкрд╛рджрди рдореЗрдВред

рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:



 <build> <plugins> ... <plugin> <groupId>org.fusesource.scalate</groupId> <artifactId>maven-scalate-plugin_2.10</artifactId> <version>1.6.1</version> <!--Support jdk 8--> <dependencies> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-compiler</artifactId> <version>2.10.4</version> </dependency> </dependencies> <executions> <execution> <goals> <goal>precompile</goal> </goals> </execution> </executions> </plugin> ... </plugins> </build>
      
      





// рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрдХрд╛рд▓рд╛ рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╣реИрдЪ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ



рдХреБрдЫ рдХреЛрдб





рдЦреИрд░, рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде, рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ



рдЕрдм рдЖрдк рдХреЛрдб рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ JDK 8 рдмрдиреНрд╕ рдХрд╛ рдЖрдирдВрдж рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ:



рдореЗрд░рд╛ рдореВрд▓ DAO:



 public interface BaseDAO<T extends Model<ID>, ID extends Serializable> extends EntityManagerAware { Class<T> getEntityClass(); default void persist(T entity) { if (entity.isNew()) { entity.assignId(); } getEntityManager().persist(entity); getEntityManager().flush(); } default T find(ID id) { return getEntityManager().find(getEntityClass(), id); } default void delete(T entity) { getEntityManager().remove(entity); } default List<T> findByQuery(String jpqlQueryString) { return findByQueryWithParams(jpqlQueryString, Collections.emptyMap()); } default List<T> findByQueryWithParams(String jpqlQueryString, Map<String, Object> params) { TypedQuery<T> query = getEntityManager().createQuery(jpqlQueryString, getEntityClass()); for (Map.Entry<String, Object> entry : params.entrySet()) { query.setParameter(entry.getKey(), entry.getValue()); } return query.getResultList(); } }
      
      







рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдо рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рдд рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ:

 public abstract class AbstractBaseDAO<T extends Model<ID>, ID extends Serializable> implements BaseDAO<T, ID> { @PersistenceContext EntityManager entityManager; @Override public EntityManager getEntityManager() { return entityManager; } }
      
      







рд╡рд┐рд╢рд┐рд╖реНрдЯ DAO рдЗрдВрдЯрд░рдлрд╝реЗрд╕:

 public interface PersonDAO extends BaseDAO<Person, UUID> { @Override default Class<Person> getEntityClass() { return Person.class; } List<Person> findAll(); }
      
      







рдареАрдХ рд╣реИ, рдХреНрд░рдорд╢рдГ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:



 @Repository public class PersonDAOImpl extends AbstractBaseDAO<Person, UUID> implements PersonDAO { @Override public List<Person> findAll() { return findByQuery("select p from Person p"); } }
      
      







рдирддреАрдЬрддрди, рд╣рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рд╕реАрдЖрд░рдпреВрдбреА рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╣рдо рд╕рд╛рдЗрдб рд╢реЛрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред

// рдмреЗрд╢рдХ, рдЖрдк рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдЬреЗрдкреАрдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕реАрдЖрд░рдпреВрдбреА рдкреЗрди рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╣рд╛рдВ рд╕реЗ рдХреБрдЫ рдЪреАрдЬреЗрдВ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИрдВ: рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди / рдЕрд╕рд╛рдЗрди рдХреА рдЧрдИ рдЖрдИрдбреА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╣рдореЗрд╢рд╛ рдмрдиреЗ рд░рд╣рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдорд░реНрдЬ рдХрд░реЗрдЧрд╛ред рд╣рд╛рдВ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред



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



 List<PersonForm> all = personService.findAll().stream().map(PersonForm::from).collect(Collectors.<PersonForm>toList());
      
      







рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ:



 <%@ val people: java.util.List[name.dargiri.web.controller.PeopleController.PersonForm]%> <div class="page-header"> <h1>People</h1> </div> <table class="table table-striped"> <thead> <tr> <th>#</th> <th>Username</th> <th>Action</th> </tr> </thead> <tbody> <% for(person <- people ) { %> <tr> <td> <%=person.id%> </td> <td> <%=person.username%> </td> <td> <a href="<%=uri("/people/edit/" + person.id)%>">Edit</a> | <a href="<%=uri("/people/delete/" + person.id)%>">Delete</a> </td> </tr> <% } %> </tbody> </table>
      
      





рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╕рд░рд▓ рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЯрд╛рд▓ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕рд░реНрд╡рд▓реЗрдЯ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдмрд╛рдБрдзрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛрдорд╛рдХреИрдЯ рдореЗрдВ рдХрд╣реЗрдВ, рддреЛ рдЪрд▓рд╛рдПрдВ:

mvn -P = рд╕рд╛рдл рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдБ



рдФрд░ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдПрд╕рдПрд╕рдкреА рдкреВрд░реНрд╡-рд╕рдВрдХрд▓рд┐рдд рдХреИрд╕реЗ рд╣реИрдВ:

 ... [INFO] --- maven-scalate-plugin_2.10:1.6.1:precompile (default) @ web --- [INFO] Precompiling Scalate Templates into Scala classes... [INFO] processing /Users/dionis/projects/spring-mvc-java8-web-app-template/web/src/main/webapp/WEB-INF/views/scalate/main/person.ssp [INFO] processing /Users/dionis/projects/spring-mvc-java8-web-app-template/web/src/main/webapp/WEB-INF/views/scalate/main/people.ssp [INFO] processing /Users/dionis/projects/spring-mvc-java8-web-app-template/web/src/main/webapp/WEB-INF/scalate/layouts/default.ssp ...
      
      







рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рднрдЧрд╡рд╛рди рдиреЗ рдордирд╛ рдХрд┐рдпрд╛, рддреЛ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ рдФрд░ рд╣рдордиреЗ рдЬреЛ рдХреБрдЫ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕рдореЗрдВ рд╕реЗ рдХреБрдЫ рддреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдЕрдм рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВрдЧреЗ, рди рдХрд┐ рджреЗрд╡ / рдХреНрдпреВрдП / рдордВрдЪрди / рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рддреИрдирд╛рддреА рдХреЗ рдмрд╛рджред



рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореИрдВрдиреЗ рдЯреНрд╡рд┐рдЯрд░ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИред



рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд░реНрдорд╛рдг:





рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реВрдЪреА:





рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрдкрд╛рджрди:









рдЙрджрд╛рд╣рд░рдг рдХреЛрдб:

github.com/dargiri/spring-mvc-java8-web-app-template



рдПрдХ рдореБрдлреНрдд рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ:



рдЬрд╛рд╡рд╛ 7 рдореЗрдВ рдПрдХ рд╣реА рдмрд╛рдд:

github.com/dargiri/spring-mvc-java-web-app-template



рд╕реНрдХрд╛рд▓рд╛ рдкрд░ рд╕рдорд╛рди рдмрд╛рдд:

github.com/dargiri/spring-mvc-scala-web-app-template



рдФрд░ рдЕрдЧрд░ рдЖрдк рдЕрднреА рднреА рдЗрд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдб рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред



рдореИрдВ IDE рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп IDE рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╕реЗ рдЪрд▓рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдБред

рдЗрд╕рд▓рд┐рдП, рд╡реЗрдм-рдРрдк-рд▓реЙрдиреНрдЪрд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╣рдо рд▓реЙрдиреНрдЪрд░ рдХреНрд▓рд╛рд╕ рдкрд╛рддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рдЖрдЗрдбрд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рд╢реБрд░реВ рд╣реЛрдЧрд╛ред

рдпрджрд┐ рдЖрдк рдЧреНрд░рд╣рдг / рдиреЗрдЯрдмреАрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЧреНрд░рд╣рдг рдХреЗ рд▓рд┐рдП, JDK 8 рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдореВрд▓ рдЧреНрд░рд╣рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ: www.eclipse.org/downloads/index-java8.php



PPS рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдФрд░ рдмрд▓ рдЖрдкрдХреЗ рд╕рд╛рде рд╣реЛ рд╕рдХрддрд╛ рд╣реИред



рдЕрдЧрд▓рд╛, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдорд╛рд╡реЗрди рдкреНрд░реЛрдлрд╛рдЗрд▓ рдмрд┐рд▓реНрдб рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдФрд░ рд▓реЙрдиреНрдЪрд░ рд╡рд░реНрдЧ рдореЗрдВ, " MULTI_MODULE_DEFAULT_PATH рдХреЗ рдорд╛рди рдХреЛ" рд╡реЗрдм / src / main / webapp "рд╕реЗ" ../web/src/main/webapp "рдпрд╛ рдЕрдкрдиреЗ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдореВрд▓ рдкрде рд╕реЗ рдкреВрд░реНрдг рдкрде рдореЗрдВ рдмрджрд▓реЗрдВред



рд╕рдВрджрд░реНрдн:



рдЕрдкрд╛рдЪреЗ рдорд╛рд╡реЗрди - maven.apache.org

рд╕реНрдХреЗрд▓реЗрдЯ - scalate.fuseource.org

рд╕реНрдХрд╛рд▓рд╛ - www.scala-lang.org

Apache Tomcat - tomcat.apache.org

рдЯреНрд╡рд┐рдЯрд░ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк - getbootstrap.com

рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ JPA - рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ред Spring.io/spring-data-jpa

рд╣рд╛рдЗрдмрд░рдиреЗрдЯ ORM - hibernate.org/orm

JDK 8 - www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

рд╕реНрдкреНрд░рд┐рдВрдЧ - рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ред Spring.io/spring-framework



All Articles