Difference between revisions of "Spring 5 training (Spring guru) - personal notes"

Line 39: Line 39:
 
Hibernate recommends to implement <code>hashCode()</code> and <code>equals()</code> on all JPA entities. They also recommend to use a particular ''Business ID'' when possible, if not then use the ''ID''. Only the key fields should be in these methods.
 
Hibernate recommends to implement <code>hashCode()</code> and <code>equals()</code> on all JPA entities. They also recommend to use a particular ''Business ID'' when possible, if not then use the ''ID''. Only the key fields should be in these methods.
  
 
 
=How to run project=
 
 
Spring boot provides some out-of-the-box tools.
 
 
To run the application:
 
<syntaxhighlight lang="bash">
 
# Using the maven installation (outside the project)
 
mvn spring-boot:run
 
 
# Using the embedded tool
 
./mvnw spring-boot:run
 
 
</syntaxhighlight>
 
  
  
Line 93: Line 78:
 
* Press Ctrl+F12.
 
* Press Ctrl+F12.
  
 +
 +
==Create new Spring project==
 +
On the main menu, choose File | New | Project
 +
* Left side: Spring initalizr (IntelliJ ultimate)
  
  
  
 
=Spring 5=
 
=Spring 5=
 +
 +
==How to run a spring project (command line)==
 +
 +
Spring boot provides some out-of-the-box tools.
 +
 +
To run the application:
 +
<syntaxhighlight lang="bash">
 +
# Using the maven installation (outside the project)
 +
mvn spring-boot:run
 +
 +
# Using the embedded tool
 +
./mvnw spring-boot:run
 +
</syntaxhighlight>
 +
  
 
==springMVC==
 
==springMVC==

Revision as of 11:19, 10 March 2018


I recently (2018) subscribe to an online training related to Spring 5 on Udemy. This page is a sum-up of my personal notes related to Spring 5.


Links

  • Spring initializr - to generate a quick start project based on the libraries you choose


Very simple web-application

  • Go to Spring initializr
  • Select
    • web > web
    • SQL > JPA
    • SQL > H2
    • Templates > Thymeleaf
    • Ops > actuator


H2 hint

When using H2 on a web application, don't forget to enable the console! Edit application.properties as follow:

spring.h2.console.enabled=true
# replace "spring5webapp" by your own application
spring.datasource.url=jdbc:h2:mem:spring5webapp;DB_CLOSE_ON_EXIT=FALSE

Then you can reach the console at http://localhost:8080/h2-console


Hibernate

General notes

Hibernate recommends to implement hashCode() and equals() on all JPA entities. They also recommend to use a particular Business ID when possible, if not then use the ID. Only the key fields should be in these methods.



IntelliJ configuration

Plugins

Useful plugings:

  • File > Settings > Plugins > Browse repositories
    • .ignore
    • Ideolog
    • Sonarlint
    • Save actions
    • GenerateSerialVersion

Enable toolbars! View > Toolbar


Import optimization

see https://stackoverflow.com/questions/11704327/how-to-optimize-imports-automatically-after-each-save-in-intellij-idea


IntelliJ IDEA offers 2 options:

  • Settings | Editor | General | Auto Import > Optimize imports on the fly
  • Commit Project dialog > Optimize imports option


Outline like Eclipse (structure view)

see https://www.jetbrains.com/help/idea/viewing-structure-of-a-source-file.html


To view the file structure, do one of the following

  • On the main menu, choose View | Tool Windows | Structure.
  • Pres StructureTool Button
  • Press Alt+7.
  • Press Ctrl+F12.


Create new Spring project

On the main menu, choose File | New | Project

  • Left side: Spring initalizr (IntelliJ ultimate)


Spring 5

How to run a spring project (command line)

Spring boot provides some out-of-the-box tools.

To run the application:

# Using the maven installation (outside the project)
mvn spring-boot:run

# Using the embedded tool
./mvnw spring-boot:run


springMVC

Implementation of MVC concept in Spring:

MVC pattern in Spring (credentials: Spring Guru, UDEMY)

Here is a short description of the schema - as I understood it + based on my experience with Spring so far (v2 to v4):

  1. Client submits a request to the server (HTTP request)
  2. Dispatcher receives the request
  3. Dispatcher asks the Handler WHO should take care of the request? i.e:
    • What is the Controller for the requested endpoint?
    • Is there any java Method that match the given HTTP request type (GET, POST, PUT, ..) + arguments?
  4. Dispatcher invokes the Controller and forwards query
    • Controller calls a Service to process the query, interact with the database and other systems.
    • Once the Service processing is complete, it returns corresponding data to the Controller
    • The Controller will convert the data into a DTO (communication Model (pojo)
    • Controller sends the pojo back to the Dispatcher
  5. Data disposal: The Dispatcher disposes of the data. i.e:
    • Send back the data directly to the client [HTTP REST calls]
    • Forward the data to a View for rending
      • View generates the page thanks to UI technology (server side) such as JSP, JSF or Themeleaf to generate HTML / Javascript / CSS
      • View sends back generated content to Dispatcher
      • Dispatcher forwards content to the Client