Getting Started | Building an Application with Spring Boot
Build an application gyms with Spring boot and Angular use Jpa
In this tutorial, we are going create a project gyms organization to display all the gyms that content name, address, city, area, logo and the Work time object has a timetable, day, start time, end time , Sportsmen and Sport. the Sport object content name, description and photo as will we add a trainer and arbitrate for each sport or gym material. the sportman can subscribe to many sports and pay his payment in the payment object we find the cost, day and duration.
Tools to be used
° Use any IDE to develop the Spring and Hibernate project. It may be STS/Eclipse/Netbeans. Here, we are using STS (Spring Tool Suite).
° Mysql for the database.
° Use any IDE to develop the Angular project. It may be Visual Studio Code/Sublime. Here, we are using Visual Studio Code.
° Server: Apache Tomcat/JBoss/Glassfish/Weblogic/Websphere.
Spring MVC
Spring MVC is the primary web framework built on the Servlet API. It is build on the popular MVC design pattern. MVC (Model-View-Controller) is a software architecture pattern, which separates application into three areas: model, view, and controller. The model represents a Java object carrying data. The view represents the visualization of the data that the model contains. The controller controls the data flow into model object and updates the view when the data changes. It separates the view and model.
Spring Boot Architecture
Spring Boot is a module of the Spring Framework. It is used to create stand-alone, production-grade Spring Based Applications with minimum efforts. It is developed on top of the core Spring Framework.
Introduction mysql to database
MySQL is a database management system that allows you to manage relational databases. It is open source software backed by Oracle. It means you can use MySQL without paying a dime. Also, if you want, you can change its source code to suit your needs. MySQL can run on various platforms UNIX, Linux, Windows, etc. You can install it on a server or even in a desktop. Besides, MySQL is reliable, scalable, and fast.
Introduction to the POM
POM A Project Object Model or POM is the fundamental unit of work in Maven. It is an XML file that contains information about the project and configuration details used by Maven to build the project. It contains default values for most projects. Examples for this is the build directory, which is target; the source directory, which is src/main/java; the test source directory, which is src/main/java; and so on. When executing a task or goal, Maven looks for the POM in the current directory. It reads the POM, gets the needed configuration information, then executes the goal.
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0>/modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.1</version>
<relativePath/>
</parent>
<groupId>com.gym</groupId>
<artifactId>gym</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gym</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>ma.glasnost.orika</groupId>
<artifactId>orika-core</artifactId>
<version>1.5.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Properties File
Properties files are used to keep ‘N’ number of properties in a single file to run the application in a different environment. In Spring Boot, properties are kept in the application.properties file under the classpath.
The application.properties file is located in the src/main/resources directory. The code for sample application.properties
We need to create database name it gym
src/main/resources/application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/gym?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=root
spring.activemq.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.ddl-auto=create-drop
server.port=8080
Class Diagram
First We Will Create a package model inside it We will add 8 Classes
- Arbitrate- Gym
- Payment
- Sport
- SportsMan
- Train
- User
- Worktime
Here, we are creating an Entity
Arbitrate.java This object content id, name, and relational @ManyToOne with Sport and Gym
src/main/java/com/gym/model/Arbitrate.java):
package com.gym.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
@Entity
public class Arbitrate {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@ManyToOne
private Sport sport;
@ManyToOne
private Gym gym;
public Arbitrate() {
super();
}
public Arbitrate(String name, Sport sport, Gym gym) {
super();
this.name = name
this.sport = sport
this.gym = gym
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Sport getSport() {
return sport;
}
public void setSport(Sport sport) {
this.sport = sport;
}
public Gym getGym() {
return gym;
}
public void setGym(gym gym) {
this.gym = gym;
}
}
Here, we are creating an Entity
Gym.java This Object content id, name, address, area, logo, and relational @OneToMany Worktime, Sport, Arbitrate and Train We need four methods addWorktime, addSportForGym, addArbitrate, addTrain
src/main/java/com/gym/model/Gym.java):
package com.gym.model;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
@Entity
public class Gym {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
private String address;
private String city;
private int area;
private String logo;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "gym")
private List<Worktime> worktimes;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "gym")
private List<Sport> sports;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "gym")
private List<Arbitrate> arbitrates;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "gym")
private List<Train> trains;
public Gym() {
super();
}
public Gym(String name, String address, String city, int area, String logo, List<Worktime> worktimes,
List<Sport> sports, List<Arbitrate> arbitrates, List<Train> trains) {
super();
this.name = name;
this.address = address;
this.city = city;
this.area = area;
this.logo = logo;
this.worktimes = worktimes;
this.sports = sports;
this.arbitrates = arbitrates;
this.trains = trains;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public int getArea() {
return area;
}
public void setArea(int area) {
this.area = area;
}
public String getLogo() {
return logo;
}
public void setLogo(String logo) {
this.logo = logo;
}
public List<Worktime> getWorktimes() {
return worktimes;
}
public void setWorktimes(List<Worktime> worktimes) {
this.worktimes = worktimes;
}
public List<Sport> getSports() {
return sports;
}
public void setSports(List<Sport> sports) {
this.sports = sports;
}
public List<Arbitrate> getArbitrates() {
return arbitrates;
}
public void setArbitrates(List<Arbitrate> arbitrates) {
this.arbitrates = arbitrates;
}
public List<Train> getTrains() {
return trains;
}
public void setTrains(List<Train> trains) {
this.trains = trains;
}
public void addWorktime(Worktime worktime) {
if (getWorktimes()==null) {
this.worktimes = new ArrayList≷>();
}
getWorktimes().add(worktime);
worktime.setGym(this);
}
public void addSportForGym(Sport sport) {
if(getSports()==null) {
this. sports = new ArrayList<>();
}
getSports().add(sport);
sport.setGym(this);
}
public void addArbitrate(Arbitrate arbitrate) {
if (getArbitrates()==null) {
this. arbitrates = new ArrayList<>();
}
getArbitrates().add(arbitrate);
arbitrate.setGym(this);
}
public void addTrain(Train train) {
if (getTrains()==null) {
this. trains = new ArrayList<>();
}
getTrains().add(train);
train.setGym(this);
}
}
Here, we are creating an Entity
Payment.java This object content id, cost, date, duration and relational @ManyToOne with SportsMan
src/main/java/com/gym/model/Payment.java):
package com.gym.model;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Payment {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private double cost;
@Temporal(TemporalType.TIMESTAMP)
private Date date;
private String duration;
@ManyToOne
private SportsMan sportsMan;
public Payment() {
super();
}
public Payment(double cost, Date date, String duration, SportsMan sportsMan) {
super();
this.cost = cost;
this.date = date;
this.duration = duration;
this.sportsMan = sportsMan;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public double getCost() {
return cost;
}
public voidsetCost(double cost) {
this.cost = cost;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getDuration() {
return duration;
}
public void setDuration(String duration) {
this.duration = duration;
}
public SportsMan getSportsMan() {
return sportsMan;
}
public voidsetSportsMan(SportsMan sportsMan) {
this.sportsMan = sportsMan;
}
}
Here, we are creating an Entity
Sport.java This object content id, name, and relational @ManyToOne with SportsMan and Gym another relational @OneToMany with Arbitrate and Train We need create two methods addArbitrate, addTrain
src/main/java/com/gym/model/Sport.java):
package com.gym.model;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
@Entity
public class Sport {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
private String description;
private String photo;
@ManyToOne
private SportsMan sportsMan;
@ManyToOne
private Gym gym;
@OneToMany(mappedBy = "sport")
private List<Arbitrate> arbitrates;
@OneToMany(mappedBy = "sport")
private List<Train> trains;
public Sport() {
super();
}
public Sport(String name, String description, String photo, SportsMan sportsMan, List<Arbitrate> arbitrates,
List<Train> trains, Gym gym) {
super();
this.name = name;
this.description = description;
this.photo = photo;
this.sportsMan = sportsMan;
this.arbitrates = arbitrates;
this.trains = trains;
this.gym = gym;
}
public long getId() {
return id;
}
public voidsetId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getPhoto() {
return photo;
}
public void setPhoto(String photo) {
this.photo = photo;
}
public SportsMan getSportsMan() {
return sportsMan;
}
public void setSportsMan(SportsMan sportsMan) {
this.sportsMan = sportsMan;
}
public Gym getGym() {
return gym;
}
public void setGym(Gym gym) {
this.gym = gym;
}
public List<Arbitrate> getArbitrates() {
return arbitrates;
}
public voidsetArbitrates(List<Arbitrate> arbitrates) {
this.arbitrates = arbitrates;
}
public List<Train> getTrains() {
return trains;
}
public void setTrains(List<Train> trains) {
this.trains = trains;
}
public void addArbitrate(Arbitrate arbitrate) {
if (getArbitrates()==null) {
this.arbitrates = new ArrayList<>();
}
getArbitrates().add(arbitrate);
arbitrate.setSport(this);
}
public void addTrain(Train train) {
if (getTrains()==null) {
this.trains = new ArrayList<>();
}
getTrains().add(train);
train.setSport(this);
}
}
Here, we are creating an Entity
SportsMan .java This object content id, firstName, lastName, age, sex, avatar, and relational @ManyToOne Worktime and another relational @OneToMany with Sport and Payment
We need to create two methods addSport and addPayment
src/main/java/com/gym/model/SportsMan .java):
package com.gym.model;
private java.util.ArrayList;
private java.util.List;
private javax.persistence.CascadeType;
private javax.persistence.Entity;
private javax.persistence.GeneratedValue;
private javax.persistence.GenerationType;
private javax.persistence.Id;
private javax.persistence.ManyToOne;
private javax.persistence.OneToMany;
@Entity
public class SportsMan {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String firstName;
private String lastName;
private int age;
private String sex;
private String avatar;
@ManyToOne
private Worktime Worktime;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "sportsMan")
private List<Sport> sports;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "sportsMan")
private List<Payment> payments;
public SportsMan() {
super();
}
public SportsMan(String firstName, String lastName, int age, String sex, String avatar,
Worktime worktime, List<Sport> sports, List<Payment> payments) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.sex = sex;
this.avatar = avatar;
this.Worktime = worktime;
this.sports = sports;
this.payments = payments;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public Worktime getWorktime() {
return Worktime;
}
public void setWorktime(Worktime worktime) {
this.Worktime = worktime;
}
public List<Sport> getSports() {
return sports;
}
public voidsetSports(List<Sport> sports) {
this.sports = sports;
}
public List<Payment> getPayments() {
return payments;
}
public voidsetPayments(List<Payment> payments) {
this.payments = payments;
}
public void addSport(Sport sport) {
if (getSports()==null) {
this.sports = new ArrayList<>();
}
getSports().add(sport);
sport.setSportsMan(this);
}
public void addPayment(Payment payment) {
id (getPayments()==null) {
this.payments = new ArrayList<>();
}
getPayments().add(payment);
payment.setSportsMan(this);
}
}
Here, we are creating an Entity
Train.java This object content id, name, and relational @ManyToOne with Sport and Gym
src/main/java/com/gym/model/Train.java):
package com.gym.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
@Entity
public class Train {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@ManyToOne
private Sport sport;
@ManyToOne
private Gym gym;
public Train() {
super();
}
public Train(String name, Sport sport, Gym gym) {
super();
this.name = name
this.sport = sport
this.gym = gym
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Sport getSport() {
return sport;
}
public void setSport(Sport sport) {
this.sport = sport;
}
public Gym getGym() {
return gym;
}
public void setGym(gym gym) {
this.gym = gym;
}
}
Here, we are creating an Entity
User.java This object content id, username, password and isAdmin
src/main/java/com/gym/model/User.java):
package com.gym.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String username;
private String password;
private boolean isAdmin;
public User() {
super();
}
public User(String username, String password, boolean isAdmin) {
super();
this.username = username
this.password = password
this.isAdmin = isAdmin
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isAdmin() {
return isAdmin;
}
public void setAdmin(boolean isAdmin) {
this.isAdmin = isAdmin;
}
}
Here, we are creating an Entity
Worktime.java This object content id, day, timetable, start, end and relational @ManyToOne with Gym and another relational @OneToMany with SportsMam.
We need to create one method addSportsManForWork
src/main/java/com/gym/model/Worktime.java):
package com.gym.model;
private java.util.ArrayList;
private java.util.Date;
private java.util.List;
private javax.persistence.Entity;
private javax.persistence.GeneratedValue;
private javax.persistence.GenerationType;
private javax.persistence.Id;
private javax.persistence.ManyToOne;
private javax.persistence.OneToMany;
private javax.persistence.Temporal;
private javax.persistence.TemporalType;
@Entity
public void Worktime {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String day;
@Temporal(TemporalType.DATE)
private Date timetable;
private String start;
private String end;
@ManyToOne
private Gym gym;
@OneToMany(mappedBy = "Worktime")
private List<SportsMan> sportsMans;
public Worktime() {
super();
}
public Worktime(String day, Date timetable, String start, String end, Gym gym, List<SportsMan> sportsMans) {
super();
this.day = day;
this.timetable = timetable;
this.start = start;
this.end = end;
this.gym = gym;
this.sportsMans = sportsMans;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getDay() {
return day;
}
public void setDay(String day) {
this.day = day;
}
public Date getTimetable() {
return timetable;
}
public void setTimetable(Date timetable) {
this.timetable = timetable;
}
public String getStart() {
return start;
}
public void setStart(String start) {
this.start = start;
}
public String getEnd() {
return end;
}
public void setEnd(String end) {
this.end = end;
}
public Gym getGym() {
return gym;
}
public void setGym(Gym gym) {
this.gym = gym;
}
public List<SportsMan> getSportsMans() {
return sportsMans;
}
public voidsetSportsMans(List<SportsMan> sportsMans) {
this.sportsMans = sportsMans;
}
public void addSportsManForWork(SportsMan sportsMan) {
if (getSportsMans()==null) {
this. sportsMans = new ArrayList<>();
}
getSportsMans().add( sportsMan);
sportsMan.setWorktime(this);
}
}
OrikaBeanMapper
Orika is a Java Bean mapping framework that recursively copies data from one object to another. It can be very useful when developing multi-layered applications. While moving data objects back and forth between these layers it is common to find that we need to convert objects from one instance into another to accommodate different APIs.
OrikaBeanMapper.java In this class Orika to convert entity => DTO / DTO => entity
src/main/java/com/gym/model/OrikaBeanMapper.java):
package com.gym.model;
import ma.glasnost.orika.MapperFactory;
import ma.glasnost.orika.impl.ConfigurableMapper;
import ma.glasnost.orika.impl.DefaultMapperFactory;
import ma.glasnost.orika.impl.generator.JavassistCompilerStrategy;
import ma.glasnost.orika.metadata.ClassMapBuilder;
import ma.glasnost.orika.unenhance.HibernateUnenhanceStrategy;
import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Component;
@Component
public class OrikaBeanMapper extends ConfigurableMapper {
private MapperFactory factory;
public OrikaBeanMapper() {
super(false);
init();
}
/**
* {@inheritDoc}
*/
@Override
protected void configure(MapperFactory factory) {
this.factory = factory;
}
private void registerClassMap(Class a, Class b) {
this.factory.classMap(a, b).mapNulls(true).mapNullsInReverse(true).byDefault().register();
}
/**
* Register class map with fields to exclude
*
* @param a
* @param b
* @param excludeFields
*/
private void registerClassMap(Class a, Class b, String... excludeFields) {
ClassMapBuilder builder = this.factory.classMap(a, b);
for (String excludeField : excludeFields) {
builder.exclude(excludeField);
}
builder.mapNulls(true).mapNullsInReverse(true).byDefault().register();
}
/**
* {@inheritDoc}
*/
@Override
protected void configureFactoryBuilder(final DefaultMapperFactory.Builder factoryBuilder) {
factoryBuilder.compilerStrategy(new JavassistCompilerStrategy());
factoryBuilder.unenhanceStrategy(new HibernateUnenhanceStrategy());
}
/**
* User Orika to convert entity => DTO / DTO => entity
*
* @param from
* @param toClass
* @param <T>
* @param <U> return
*/
public <T, U> T convertDTO(U from, Class<T> toClass) {
if (from == null) {
return null;
}
return map(from, toClass);
}
/**
* User Orika to convert entity => DTO / DTO => entity
*
* @param from
* @param toClass
* @param <T>
* @param <U>
* @return
*/
public <T, U> List<T> convertListDTO(Iterable<U> from, Class<T> toClass) {
if (from == null) {
return null;
}
return mapAsList(from, toClass);
}
public <T, U> Page<T> convertPageDTO(Page<U> from, Class<T> toClass) {
if (from == null) {
return null;
}
return from.map(entity -> factory.getMapperFacade().map(entity, toClass));
}
}
The DTO Classes
- ArbitrateDto- GymDto
- PaymentDto
- SportDto
- SportsManDto
- TrainDto
- UserDto
- WorktimeDto
We'll handle the conversions that need to happen between the internal entities of a Spring application and the external DTOs (Data Transfer Objects) that are published back to the client.
ArbitrateDto.java
src/main/java/com/gym/dto/ArbitrateDto.java):
package com.gym.dto;
public class ArbitrateDto {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
GymDto.java
src/main/java/com/gym/dto/GymDto.java):
package com.gym.dto;
import java.util.List;
public class GymDto {
private long id;
private String name;
private String address;
private String city;
private int area;
private String logo
private List<WorktimeDto> worktimes;
private List<SportDto> sports;
private List<ArbitrateDto> arbitrates;
private List<TrainDto> trains;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public int getArea() {
return area;
}
public void setArea(int area) {
this.area = area;
}
public String getLogo() {
return logo;
}
public void setLogo(String logo) {
this.logo = logo;
}
public List<WorktimeDto> getWorktimes() {
return worktimes;
}
public void setWorktimes(List<WorktimeDto> worktimes) {
this.worktimes = worktimes;
}
public List<SportDto> getSports() {
return sports;
}
public void setSports(List<SportDto> sports) {
this.sports = sports;
}
public List<ArbitrateDto> getArbitrates() {
return arbitrates;
}
public void setArbitrates(List<ArbitrateDto> arbitrates) {
this.arbitrates = arbitrates;
}
public List<TrainDto> getTrains() {
return trains;
}
public void setTrains(List<TrainDto> trains) {
this.trains = trains;
}
}
PaymentDto.java
src/main/java/com/gym/dto/PaymentDto.java):
package com.gym.dto;
import java.util.Date;
public class PaymentDto {
private long id;
private double cost;
private Date date;
private String duration;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public double getCost() {
return cost;
}
public voidsetCost(double cost) {
this.cost = cost;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getDuration() {
return duration;
}
public void setDuration(String duration) {
this.duration = duration;
}
}
SportDto.java
src/main/java/com/gym/dto/SportDto.java):
package com.gym.dto;
public class SportDto {
private long id;
private String name;
private String description;
private String photo;
private List<ArbitrateDto> arbitrates;
private List<TrainDto> trains;
public long getId() {
return id;
}
public voidsetId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getPhoto() {
return photo;
}
public void setPhoto(String photo) {
this.photo = photo;
}
public List<ArbitrateDto> getArbitrates() {
return arbitrates;
}
public void setArbitrates(List<ArbitrateDto> arbitrates) {
this.arbitrates = arbitrates;
}
public List<TrainDto> getTrains() {
return trains;
}
public void setTrains(List<TrainDto> trains) {
this.trains = trains;
}
}
SportsManDto.java
src/main/java/com/gym/dto/SportsManDto.java):
package com.gym.dto;
private java.util.List;
public class SportsManDto {
private long id;
private String firstName;
private String lastName;
private int age;
private String sex;
private String avatar;
private List<SportDto> sports;
private List<PaymentDto> payments;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public List<SportDto> getSports() {
return sports;
}
public voidsetSports(List<SportDto> sports) {
this.sports = sports;
}
public List<PaymentDto> getPayments() {
return payments;
}
public voidsetPayments(List<PaymentDto> payments) {
this.payments = payments;
}
}
TaainDto.java
src/main/java/com/gym/dto/TaainDto.java):
package com.gym.dto;
public class TrainDto {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
WorktimeDto.java
src/main/java/com/gym/dto/WorktimeDto.java):
package com.gym.dto;
private java.util.Date;
private java.util.List;
public void WorktimeDto {
private long id;
private String day;
private Date timetable;
private String start;
private String end;
private List<SportsManDto> sportsMans;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getDay() {
return day;
}
public void setDay(String day) {
this.day = day;
}
public Date getTimetable() {
return timetable;
}
public void setTimetable(Date timetable) {
this.timetable = timetable;
}
public String getStart() {
return start;
}
public void setStart(String start) {
this.start = start;
}
public String getEnd() {
return end;
}
public void setEnd(String end) {
this.end = end;
}
public List<SportsManDto> getSportsMans() {
return sportsMans;
}
public voidsetSportsMans(List<SportsManDto> sportsMans) {
this.sportsMans = sportsMans;
}
}
JPA Repositories
The JPA module of Spring Data contains a custom namespace that allows defining repository beans. It also contains certain features and element attributes that are special to JPA. Generally, the JPA repositories can be set up by using the repositories element, as shown in the following example:
Spring Repositories Spring has supported the concept of a repository for some time now. Repository is one of Spring's core stereotypes and you should plan on using them in your data access layer, regardless of your chosen data access layer API and framework.
Here, we are creating an interface
ArbitrateDao.javasrc/main/java/com/gym/dao/ArbitrateDao.java):
package com.gym.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.gym.model.Arbitrate;
@Repository
public interface ArbitrateDao extends JpaRepository<Arbitrate, Long> {
}
Here, we are creating an interface
GymDao.javasrc/main/java/com/gym/dao/GymDao.java):
package com.gym.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.gym.model.Gym;
@Repository
public interface GymDao extends JpaRepository<Gym, Long> {
}
Here, we are creating an interface
PaymentDao.javasrc/main/java/com/gym/dao/PaymentDao.java):
package com.gym.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.gym.model.Payment;
@Repository
public interface PaymentDao extends JpaRepository<Payment, Long> {
}
Here, we are creating an interface
SportDao.javasrc/main/java/com/gym/dao/SportDao.java):
package com.gym.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.gym.model.Sport;
@Repository
public interface SportDao extends JpaRepository<Sport, Long> {
}
Here, we are creating an interface
SportsManDao.javasrc/main/java/com/gym/dao/SportsManDao.java):
package com.gym.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.gym.model.SportsMan;
@Repository
public interface SportsManDao extends JpaRepository<SportsMan, Long> {
}
Here, we are creating an interface
TrainDao.javasrc/main/java/com/gym/dao/SportsManDao.java):
package com.gym.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.gym.model.Train;
@Repository
public interface TrainDao extends JpaRepository<Train, Long> {
}
Here, we are creating an interface
UserDao.javasrc/main/java/com/gym/dao/UserDao.java):
package com.gym.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.gym.model.User;
@Repository
public interface UserDao extends JpaRepository<User, Long> {
}
Here, we are creating an interface
WorktimeDao.javasrc/main/java/com/gym/dao/WorktimeDao.java):
package com.gym.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.gym.model.Worktime;
@Repository
public interface WorktimeDao extends JpaRepository<Worktime, Long> {
}
Conclusion
Now we have an overview of Spring Boot CRUD example when building an App with clean architect. we have also added Service Components and OrikaBeanMapper
We also take a look at client-server architecture for REST API using Spring Web MVC & Spring Data JPA, as well, we are gooing to continue with Angular 10 project structure for building a front-end app to make HTTP requests and consume responses.