-
Notifications
You must be signed in to change notification settings - Fork 11
simulations v1.0
- Add
MongoDB
NoSQL to Spring Bootsimulations
-
player
@Entity
1:n
imagePlayer@Document
-
MongoDB
dependency -
application.properties
configuration: string connection - MongoRepository and Service
- H2 local (download install and create a local H2 DB)
-
Download the
H2 database
: Go to theH2 database
website at H2 DB and download the latest version of the H2 database for Linux. You can download either the ZIP or the TAR package. -
Extract the downloaded file: Open the terminal and navigate to the folder where you downloaded the
H2 database.
Extract the contents of the downloaded file using the following command:
tar -zxvf h2-*.tar.gz
-
Start the H2 database server: Navigate to the
H2 database
directory and start theH2 database
server by running the following command:
java -jar h2*.jar
cd <download directory>
unzip h2*.zip
cd h2/bin
chmod +x h2.s
This will start the H2 database
server and display the URL where the H2 database
can be accessed.
-
Check the
H2 database
console: Open a web browser and enter the URL displayed in the terminal. The H2 database web interface will open in the browser. -
Create a new database: In the
H2 database
web interface, click on the "Create a new database" button and follow the prompts to create a new database
once the button is clicked the db is created, remember the data configuration, you will need to configure application.properties:
-
Connect to the new database: Once the new database is created, click on the "Connect" button in the
H2 database
web interface and introduce the right parameters.
Saved Settings: Generic H2 (Server)
Setting Name: Generic H2 (Server)
Driver Class: org.h2.Driver
JDBC URL: jdbc:h2:/home/albert/MyProjects/DataBase/db-instances/simulationsdb
User Name: albert
Password: ••••
- Use the
H2 database
: Now you can start using theH2 database
. You can create tables, insert data, and perform queries using SQL commands. Configure the application.properties file.
and after that spring.jpa.hibernate.ddl-auto=none
because schema db has already created!
SRV Connection Format MongoDB supports a DNS-constructed seed list. Using DNS to construct the available servers list allows more flexibility of deployment and the ability to change the servers in rotation without reconfiguring clients.
- dependencies: mongoDB
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
- application.properties: application.properties
#MongoDB_DATASOURCE
spring.data.mongodb.uri=mongodb+srv://simulationUser:1234@clustertest.138fac.mongodb.net/
spring.data.mongodb.database=simulations
- protocol:
mongodb+srv:
- user:
simulationUser
- password:
1234
- cluster:
clustertest
- Hash cluster:
138fac
- DB:
simulations
package com.example.demo.model;
import org.bson.types.Binary;
import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.mongodb.core.mapping.Document;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "imagePlayer")
public class ImagePlayer {
@Id
private String id;
private String playerId;
//private String nameImage;
private String imageName;
private String type;
private Double size;
//private Binary dataImage;
private Binary imageData;
}
// imports ....
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Player {
@Id
private String id;
private String player;
private int age;
private boolean active;
private List<String> imagePlayerIds = new ArrayList<>();
// methods ...
Note
To populate the db we should modify RunnerFillingDB
and update schema. Once we have fake-data on local and cloud we MUST set DDL
to none.
We are going to create upload method: both classes, Player
and ImagePlayer
will share ids in a one-to-many relationship.
-
Player
will be stored at local H2 SQL DB. -
ImagePlayer
will be stored at MongoDB Cloud noSQL DB.
The code is designed to:
- retrieve a
player
by its ID from a player repository. - It then checks if the
player
exists and sets the player ID for the newimagePlayer
@Document. - If the
player
exists, it saves theimagePLayer
@Document to the imagePlayer repository and adds theimagePlayer
ID to the player’s list of imagePlayer IDs, - and then saves the updated player.
package com.example.demo.repository;
import com.example.demo.model.ImagePlayer;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface ImagePlayerRepository extends MongoRepository<ImagePlayer, String> {
//WE SHOULD MAKE SOME DERIVATED QUERIES
}
// imports ...
@RestController
@RequestMapping("/api/v1/imagePlayer")
public class ImagePlayerController {
@Autowired
PlayerRepository playerRepository;
@Autowired
ImagePlayerRepository imagePlayerRepository;
@Autowired
ImagePlayerService imagePlayerService;
//https://github.com/AlbertProfe/CifoJava2023/blob/1ae3bdbc654df8f25658acf177e8d6b65e6c6c55/LibraryManagementRest/src/main/java/com/example/myFirstSpring/restcontroller/BookImageRestController.java
@PostMapping("/uploadImage")
public ResponseEntity<ImagePlayer> uploadImage(@RequestParam String playerId,
@RequestParam String imageName,
@RequestParam MultipartFile file) throws IOException {
//to do: add headers
//HttpHeaders headers = new HttpHeaders();
// Finds a playerId in the player repository by its ID, if present.
Optional<Player> player = playerRepository.findById(playerId);
//check playerId exist ....
if (player.isPresent()) {
//create object
ImagePlayer imagePlayer = new ImagePlayer();
// create UUID and set object
String imagePlayerId = UUID.randomUUID().toString();
imagePlayer.setId(imagePlayerId);
imagePlayer.setPlayerId(playerId);
imagePlayer.setImageName(imageName);
//set file to field
//to do: try & catch
imagePlayer.setImageData(new Binary(file.getBytes()));
//assign UUID imagePlayer created to player within ids list
player.get().addImagePlayerId(imagePlayerId);
//save Document to mongoDB
imagePlayerRepository.save(imagePlayer);
//save Entity to H2 local
playerRepository.save(player.get());
//return imagePlayer to API rest
return ResponseEntity.accepted().body(imagePlayer);
} else {
return ResponseEntity.notFound().build();
}
}
// other methods restcontroller ...
}
@GetMapping("/getImageById")
public ResponseEntity<byte[]> getImage(@RequestParam String id){
Optional<ImagePlayer> imagePlayer = imagePlayerRepository.findById(id);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_PNG);
if (imagePlayer.isPresent())
return new ResponseEntity<>( imagePlayer.get().getImageData().getData(), headers, HttpStatus.OK );
else return ResponseEntity.notFound().build();
}
package com.example.demo.service;
import com.example.demo.model.ImagePlayer;
import com.example.demo.repository.ImagePlayerRepository;
import com.github.javafaker.Faker;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
@Service
public class ImagePlayerService {
@Autowired
ImagePlayerRepository imagePlayerRepository;
public List<ImagePlayer> findAllImages (){
return imagePlayerRepository.findAll();
}
public Optional<ImagePlayer> findById (String id){
return imagePlayerRepository.findById(id);
}
public ImagePlayer createImagePlayer (ImagePlayer imagePlayer){
return imagePlayerRepository.save(imagePlayer);
}
public void deleteAll (){
imagePlayerRepository.deleteAll();
}
public void deleteById (String id){
imagePlayerRepository.deleteById(id);
}
// to-do: update ImagePlayer
public List<ImagePlayer> populate (){
List<ImagePlayer> imagePlayers = new ArrayList<>();
Faker faker = new Faker();
for (int i= 0; i < 10; i++){
ImagePlayer imagePlayer = new ImagePlayer();
imagePlayer.setId( UUID.randomUUID().toString());
imagePlayer.setNameImage(faker.funnyName().name());
imagePlayer.setType("BYTE RAW BASE64");
imagePlayer.setSize(faker.number().randomDouble(2, 100, 300));
imagePlayers.add(imagePlayer);
imagePlayerRepository.save(imagePlayer);
}
return imagePlayers;
}
}
Note
To populate the db we should modify RunnerFillingDB
First at all, we are working with local/cloud DB, so once DBs are populated we don't need to populate anymore:
public void run(ApplicationArguments args) throws Exception {
//populate_H2_DB();
//testSimulationsMongoDB();
}
player whom to add an image avatar:
TRUE 37 13b67b18-5718-4ed2-ac1c-c95c47558ab7 Raphael
then, from Postam we select a PNG from local machine.
So, we need a image png.
Then in Postman we set the request params:
And set file type to upload:
Eventually, when params and image are set, we send the request:
JSON response
{
"id": "c8521e15-5d4d-4991-8242-27fc10a8ec9f",
"imageName": "avatar raphael",
"type": null,
"size": null,
"imageData": {
"type": 0,
"data": "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"
},
"playerId": "13b67b18-5718-4ed2-ac1c-c95c47558ab7"
}
imagePlayer on mongoDB:
_id
"c8521e15-5d4d-4991-8242-27fc10a8ec9f"
imageName
"avatar raphael"
imageData
Binary.createFromBase64('/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYn…', 0)
playerId
"13b67b18-5718-4ed2-ac1c-c95c47558ab7"
_class
"com.example.demo.model.ImagePlayer"
player updated on H2 local:
imagePlayerId
to find: c8521e15-5d4d-4991-8242-27fc10a8ec9f
http://localhost:8089/api/v1/imagePlayer/getImageById?id=c8521e15-5d4d-4991-8242-27fc10a8ec9f
React - Spring Boot - API Rest - H2 DataBase - Axios - React_router_dom - JPA