PedroGeoGISdev wiki
  • Home
  • Linux OS
    • Linux: concepts
    • Linux: basic concepts
    • Linux: Bash
    • Linux: su and sudo
    • Linux: pipes
    • Linux: File System
    • Linux: Virtual Machines

    • Linux: distros
    • Linux Distros: Ubuntu
    • Linux Distros: Mint
    • Linux Distros: Debian
    • Linux Distros: openSuse
    • Linux Distros: Manjaro
    • Linux Distros: Red Hat Enterprise

    • Linux: laboratories
    • Linux Lab#LI01-1: Choose Linux
    • Linux Lab#LI01-2: Install at least three distributions
    • Linux Lab#LI01-3: Adjust user permissions
    • Linux Lab#LI02-1: Export env user with grep and pipe
    • Linux Lab#LI03-1: Manage users and groups
    • Linux Lab#LI03-2: Manage files
    • Linux Lab#LI03-3: Manage software
    • Linux Lab#LI03-4: Manage hardware
    • Linux Lab#LI04-1: Bash scripting, qtool
    • Linux Lab#LI04-2: Bash scripts as terminal tool
    • Linux Lab#LI04-3: Distribute the terminal app

    • Linux readings
    • Linux Resources
  • DevOps
    • What is DevOps
    • DevOps: Introduction
    • DevOps: Agile and Microservices
    • Infrastructure as code (IaC)
    • Immutable Infrastructure
    • Software Lifecycle

    • Documentation
    • How to document: Quarto and Obsidian

    • Network protocols
    • Network: Basics
    • Network: Client-server
    • Network Protocols
    • Network: DNS
    • Network: API Rest
    • Network: gRPC
    • Network: Websocket
    • Network: SMTP
    • Network: Ping
    • Network: UDP
    • Network: webhook
    • Network: SOAP
    • Network: graphQL

    • Version Control
    • Git
    • GitHub
    • Idea and GitHub 2023
    • Git and GitHub 2023 CLI

    • IDEs
    • IDE: Visual Code
    • IDE: IntellJIdea

    • DevOps tools
    • Amazon Web Services AWS
    • Docker
    • Jenkins pipelines
    • Kubernetes k8s
    • Digital Ocean
    • Nagios
    • Ansible

    • DevOps Laboratories
    • Lab 1: chat App
    • Lab 2: Spring Boot AWS AEB manually
    • Lab 3: Spring Boot and AWS S3 publisher
    • Lab 4: Spring Boot Docker/Jenkins
    • Lab 5: k8s on Digital Ocean
    • Lab 6: Spring Boot AWS codecommit

    • DevOps readings
    • DevOps Resources
  • MarkUp
    • MarkUp Languages
    • Introduction Markup
    • HTML Markup
    • Markdown Markup
    • Markdown and HTML working together, good idea?

    • Quarto Markdown
    • Quarto Markdown: basics
    • Quarto Markdown: creating
    • Quarto Markdown: publishing
    • Quarto Markdown: code & data
    • Quarto Markdown: api rest call
    • Quarto Markdown: OJS Cells
    • Quarto Markdown: cheat-sheet

    • Styling: CSS
    • Cascade Style Sheet
    • Cascade Style Sheet: Box Model and Containers
    • CSS: W3.css

    • MarkUp Languages Laboratories
    • Lab#MD01-1: Create and publish by Quarto

    • MarkUp Languages readings
    • MarkUp Languages Resources
  • Java SE
    • What is Java SE
    • Java Standard Edition: Basics
    • Java Standard Edition: Principles
    • Java MOOC Helsinki
    • Java MOOC Helsinki Syllabus

    • Java Create Project
    • Java SE: Maven
    • Java SE: Create Maven Project
    • Java SE: Project push GitHub
    • Java SE: JUnit and TDD

    • Java Concepts
    • Java SE: Class and Objects
    • Java SE: Scope
    • Java SE: static modifier
    • Java SE: Coupling and DDD
    • Java SE: Packages
    • Java SE: Abstract/Interface
    • Java SE: Java 8

    • Java Principles
    • Java SE: Encapsulation
    • Java SE: Abstraction
    • Java SE: Inherence
    • Java SE: Polymorphism

    • Java Design Patterns
    • Java Patterns: UML
    • Java Patterns: Types
    • Singleton
    • Factory
    • Abstract Factory
    • Builder
    • Facade
    • Bridge
    • Decorator
    • Composite
    • Observer
    • Strategy
    • State
    • Commander

    • Java SE Laboratories
    • Lab#SE00-1: Maven Person
    • Lab#SE00-2: Maven Clinic
    • Lab#SE00-3: Library Model
    • Lab#SE00-4: Abstract/Interface Human
    • Lab#SE01-1: Maven/Gradle Person and Account
    • Lab#SE01-2: Maven/Gradle Person and Account stored in JSON
    • Lab#SE02-1: Movie/Review, Model
    • Lab#SE02-2: Movie/Review, CRUD Operations
    • Lab#SE02-3: Movie/Review, factory
    • Lab#SE02-4: Movie/Review, interactivity and coupling
    • Lab#SE02-5: Movie/Review, simulate interactivity by console
    • Lab#SE03-1: Library/Book, Core-Model
    • Lab#SE03-2: Library/Book, Sprint Zero
    • Lab#SE03-3: Library/Book, Expand Model
    • Lab#SE04-1: healthyFood Restaurant, Core Model

    • Java SE readings
    • Java SE Resources
  • Python
    • Python Basics
    • Python: Basic Concepts
    • Python: Tips
  • JavaScript
    • JavaScript Basics
    • JavaScript: Basic Concepts
    • JavaScript: Tips
  • Spring
    • Spring Legacy
    • Spring Framework
    • Spring MVC
    • Springs Servlets

    • Spring Boot Basics
    • Spring Boot: fundamentals
    • Spring Boot: create a Project
    • Spring Boot: H2 DB and Thymeleaf
    • Spring Boot: cycle

    • Spring Boot Concepts
    • Spring Boot: Dependency Injection
    • Spring Boot: Annotations
    • Spring Boot: Controller
    • Spring Boot: View
    • Spring Boot: Thymeleaf
    • Spring Boot: Vaadin Flow
    • Spring Boot: Vaadin Hilla
    • Spring Boot: Model
    • Spring Boot: Rest
    • Spring Boot: Data & DB
    • Spring Boot: JPA & DI
    • Spring Boot: JPA Mappings
    • Spring Boot: JPA Relationships
    • Spring Boot: JPA Queries
    • Spring Boot: JPA Inherence
    • Spring Boot: Scaling

    • Spring Boot Laboratories
    • Lab#SB00-1: Library UML
    • Lab#SB00-2: CRUD User
    • Lab#SB00-3: LibraryManagement
    • Lab#SB00-4: API Rest
    • Lab#SB00-5: Rest & JPA-H2
    • Lab#SB00-6: Rest & MongoDB
    • Lab#SB00-7: Styling
    • Lab#SB01-1: DataBase
    • Lab#SB02-1: JPA Relationships
    • Lab#SB03-1: APIs & cloud
    • Lab#SB04-1: JPA Inherence
    • Lab#SB05-1: API Rest
    • Lab#SB06-1: employeeCourse
    • Lab#SB07-1: monitor Book
    • Lab#SB08-1: Restaurant UML
    • Lab#SB08-2: Vaadin
    • Lab#SB08-3: H2 and API Rest
    • Lab#SB08-4: JPA
    • Lab#SB08-5: Test API Rest
    • Lab#SB09-1: SpringIO Conference

    • Spring Boot readings
    • Spring Boot Resources
  • ReactJS
    • ReactJS: Principles
    • React JS: Introduction
    • React JS: render virtual DOM
    • React JS: Create a React project
    • React JS: Components
    • React JS: JSX
    • React JS: props and state

    • JavaScript: web scripting
    • JavaScript: basics
    • JavaScript: functions
    • JavaScript: objects
    • JavaScript: variables
    • JavaScript: flux control

    • ES6: ECMAScript 6
    • React JS ES6: arrow functions
    • React JS ES6: import modules
    • React JS ES6: array, data and key
    • React JS ES6: destructuring
    • React JS ES6: spread operator

    • ReacJS 18: Hooks
    • React JS: Rules of Hooks
    • ReactJS: useState
    • React JS: useReducer
    • React JS: useRef
    • React JS: useEffect
    • React JS: useContext
    • ReactJS: useMemo
    • ReactJS: custom hooks

    • ReactJS: Designing an App
    • React JS App: async
    • React JS App: events
    • React JS App: router
    • React JS App: conditional render
    • React JS App: styling

    • React JS: Laboratories
    • Lab#RE01-1: API Rest Axios
    • Lab#RE02-1: Router & Hooks
    • Lab#RE03-1: to-do app
    • Lab#RE03-2: HighCharts
    • Lab#RE03-3: API Rest Mono
    • Lab#RE03-4: API Rest Domains
    • Lab#RE03-5: data management
    • Lab#RE04-1: todo & server
    • Lab#RE04-2: Spring Boot & ReactJS
    • Lab#RE05-1: chat & websockets
    • Lab#RE05-2: chat: backend
    • Lab#RE05-3: chat & AWS
    • Lab#RE05-4: chat: test ws AWS
    • Lab#RE05-5: chat & front
    • Lab#RE05-6: chat & ws: front
    • Lab#RE06-1: healthyFood Restaurant
    • Lab#RE06-1-PR: create a pull request
    • Lab#RE07-1: traffic lights simulation

    • React JS readings
    • ReactJS Resources
  • Learning
    • Vocabulary
    • General Vocabulary
    • SCRUM Vocabulary
    • DevOps Vocabulary
    • Java SE Vocabulay
    • Spring Boot Vocabulary
    • DataBase Vocabulary
    • ReactJS Vocabulary
    • Web Vocabulary

    • Learning
    • Useful Questions
    • Learning: tips
    • Writing
    • Taking Notes
    • Comments
    • Document
    • Auto-Evaluate

    • Books & Articles
    • Books
    • Articles

    • What is SCRUM
    • SCRUM Agile Methodology
    • Agile Manifesto & Values
    • SCRUM Guide

    • Scrum Steps
    • Meetings, Impediments and Iterations
    • User stories, Tasks and Habits
    • Delivering Value & Communication
    • ScrumMaster, how it works
    • Mindset, the key to everything
    • Product Owner, how it works
    • Managing Time & Mind
    • Team & the Specialist
    • Albertus’ Dilemma
    • Before SCRUM
    • Team Dynamics
    • Emotions and Thoughts
    • Decision Making and Intuition
    • Beyond SCRUM
    • Balances, atmosphere and tools

    • Resources
    • SCRUM Resources
  • QGIS
    • QGIS basics
    • QGIS: basic concepts

    • QGIS laboratories
    • QGIS Laboratory 1: Introduction to Open Source GIS
  • ArcGIS Pro
    • ArcGIS Pro basics
    • ArcGIS Pro: basic concepts

    • ArcGIS Pro laboratories
    • ArcGIS Pro Laboratory 1: Getting Started
  • Bookmarks
    • Online Resources
    • Online Resources
  • About
    • About me and this site
    • About me
    • About this site
    • About images credit
  • Email
  • GitHub
  • LinkedIn
  1. Spring Boot Laboratories
  2. Lab#SB09-1: SpringIO Conference
  • Spring

  • Spring Legacy
    • Spring Framework
    • Spring MVC
    • Springs Servlets

  • Spring Boot Basics
    • Spring Boot: fundamentals
    • Spring Boot: create a Project
    • Spring Boot: H2 DB and Thymeleaf
    • Spring Boot: cycle

  • Spring Boot Concepts
    • Spring Boot: Dependency Injection
    • Spring Boot: Annotations
    • Spring Boot: Controller
    • Spring Boot: View
    • Spring Boot: Thymeleaf
    • Spring Boot: Vaadin Flow
    • Spring Boot: Vaadin Hilla
    • Spring Boot: Model
    • Spring Boot: Rest
    • Spring Boot: Data & DB
    • Spring Boot: JPA & DI
    • Spring Boot: JPA Mappings
    • Spring Boot: JPA Relationships
    • Spring Boot: JPA Queries
    • Spring Boot: JPA Inherence
    • Spring Boot: Scaling

  • Spring Boot Laboratories
    • Lab#SB00-1: Library UML
    • Lab#SB00-2: CRUD User
    • Lab#SB00-3: LibraryManagement
    • Lab#SB00-4: API Rest
    • Lab#SB00-5: Rest & JPA-H2
    • Lab#SB00-6: Rest & MongoDB
    • Lab#SB00-7: Styling

    • Lab#SB01-1: DataBase
    • Lab#SB02-1: JPA Relationships
    • Lab#SB03-1: APIs & cloud
    • Lab#SB04-1: JPA Inherence
    • Lab#SB05-1: API Rest

    • Lab#SB06-1: employeeCourse

    • Lab#SB07-1: monitor Book

    • Lab#SB08-1: Restaurant UML
    • Lab#SB08-2: Vaadin
    • Lab#SB08-3: H2 and API Rest
    • Lab#SB08-4: JPA
    • Lab#SB08-5: Test API Rest

    • Lab#SB09-1: SpringIO Conference

  • Spring Boot readings
    • Spring Boot Resources

On this page

  • 1 UML Class Diagram
    • 1.1 Fake Data Objects
    • 1.2 Java Entities
      • 1.2.1 @Builder
      • 1.2.2 Conference SpringIO Entities
    • 1.3 Creating Conference Objects
    • 1.4 SQL Data Initialization with data.sql
      • 1.4.1 UUID
  • 2 Create Project
    • 2.1 Project structure
    • 2.2 View
  • 3 Commits
  • Edit this page
  • Report an issue
  1. Spring Boot Laboratories
  2. Lab#SB09-1: SpringIO Conference

Lab#SB09-1: SpringIO Conference

Spring IO Conference Barcelona

Spring-Boot
lab
Spring Boot
Author

albertprofe

Published

Wednesday, January 10, 2024

Modified

Sunday, August 10, 2025

📘 Spring Boot Lab#SB09-1: SpringIO Conference

This lab explores all the topics from the UML diagram for the entities Conference, Book, and Speaker; example objects; Java entity code; object creation; and SQL data initialization.

Besides, we will create the Spring Boot Vaadin project and push to remote repo.


1 UML Class Diagram

For Conference, Book, and Speaker

classDiagram
    class Book {
        +String title
        +String author
        +String ISBN
    }

    class Speaker {
        +String name
        +String bio
        +String email
    }

    class Conference {
        +UUID id
        +String date
        +String linkToYouTubeVideo
        +String title
        +String conferenceName
        +String content
        +Integer duration
        +String room
        +Book book
        +Speaker speaker
    }

    Conference --> Book : references
    Conference --> Speaker : references

1.1 Fake Data Objects

  1. Spring.io Barcelona 2024
    • Conference: “Spring Boot Updates”, Date: 2024-05-15, Room: “Auditorium A”, Duration: 90 minutes, Link: “youtube.com/2024springboot”
    • Book: “Spring in Action”, Author: “Craig Walls”, ISBN: “9781617294945”
    • Speaker: “John Doe”, Bio: “Senior Developer Advocate”, Email: “john.doe@example.com”
  2. Spring.io Barcelona 2023
    • Conference: “Reactive Programming with Spring”, Date: 2023-04-20, Room: “Room B”, Duration: 75 minutes, Link: “youtube.com/2023reactive”
    • Book: “Reactive Spring”, Author: “Josh Long”, ISBN: “9781617297571”
    • Speaker: “Jane Smith”, Bio: “Spring Developer”, Email: “jane.smith@example.com”
  3. Spring.io Barcelona 2022
    • Conference: “Kubernetes and Spring Cloud”, Date: 2022-03-10, Room: “Main Hall”, Duration: 60 minutes, Link: “youtube.com/2022kubernetes”
    • Book: “Cloud Native Java”, Author: “Josh Long & Kenny Bastani”, ISBN: “9781449374648”
    • Speaker: “Alice Johnson”, Bio: “Cloud Architect”, Email: “alice.johnson@example.com”

1.2 Java Entities

We are creating @Entity objects with:

  • the builder pattern
  • the UUID generator
  • and Lombok

1.2.1 @Builder

The @Builder annotation is part of Project Lombok, a Java librarythat automatically generates boilerplate code through annotations. It’s a convenient way to implement the Builder pattern without manually writing all the builder code.

The technique in Java for writing long expressions using the dot operator is known as the Builder Pattern.

This pattern is a creational design pattern that allows for the step-by-step construction of complex objects.

It is particularly useful when an object requires many configuration options, enabling method chaining to make the code more readable and maintainable.

@Entity User @Builder example

import lombok.Builder;
import lombok.Getter;

@Builder
@Getter
public class User {
    private final String firstName;
    private final String lastName;
    private final int age;
    private final String email;
}

This generates a builder that can be used like this:


User user = User.builder()
                .firstName("John")
                .lastName("Doe")
                .age(30)
                .email("john.doe@example.com")
                .build();

1.2.2 Conference SpringIO Entities

Conference Entity

import lombok.*;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.util.UUID;

@Entity
@Table(name = "conferences")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Conference {

    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(name = "UUID",
          strategy = "org.hibernate.id.UUIDGenerator")
    @Column(name = "id", updatable = false,
          nullable = false)
    private UUID id;

    @Column(nullable = false)
    private String date;

    @Column(name = "youtube_link")
    private String linkToYouTubeVideo;

    @Column(nullable = false)
    private String title;

    @Column(name = "conference_name", 
          nullable = false)
    private String conferenceName;

    @Column(columnDefinition = "TEXT")
    private String content;

    private Integer duration;

    private String room;

    @ManyToOne
    @JoinColumn(name = "book_id", 
            nullable = false)
    private Book book;

    @ManyToOne
    @JoinColumn(name = "speaker_id",
            nullable = false)
    private Speaker speaker;
}

Book Entity

import lombok.*;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.util.List;
import java.util.UUID;

@Entity
@Table(name = "books")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Book {

    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(name = "UUID",
            strategy = "org.hibernate.id.UUIDGenerator")
    @Column(name = "id", updatable = false,
            nullable = false)
    private UUID id;

    @Column(nullable = false)
    private String title;

    @Column(nullable = false)
    private String author;

    @Column(nullable = false, unique = true)
    private String ISBN;

    @OneToMany(mappedBy = "book")
    private List<Conference> conferences;
}

Speaker Entity

import lombok.*;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.util.List;
import java.util.UUID;

@Entity
@Table(name = "speakers")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Speaker {

    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(name = "UUID",
            strategy = "org.hibernate.id.UUIDGenerator")
    @Column(name = "id", updatable = false,
            nullable = false)
    private UUID id;

    @Column(nullable = false)
    private String name;

    @Column(columnDefinition = "TEXT")
    private String bio;

    @Column(nullable = false, unique = true)
    private String email;

    @OneToMany(mappedBy = "speaker")
    private List<Conference> conferences;
}

1.3 Creating Conference Objects

We’ll instantiate the Conference, Book, and Speaker classes. Here’s how we can do this using the builder pattern provided by Lombok:

@Entity creation

Object 1

Book book1 = Book.builder()
    .id(UUID.randomUUID())
    .title("Spring Boot in Action")
    .author("Craig Walls")
    .ISBN("9781617292545")
    .build();

Speaker speaker1 = Speaker.builder()
    .id(UUID.randomUUID())
    .name("Stéphane Nicoll")
    .bio("Spring Framework committer")
    .email("snicoll@pivotal.io")
    .build();

Conference conference1 = Conference.builder()
     .id(UUID.randomUUID())
     .date("2023-05-17")
     .linkToYouTubeVideo("https://www.youtube.com/watch?v=TtQTF7M9xPo")
     .title("Spring Boot 3.0 & Spring Framework 6.0: What's New")
     .conferenceName("Spring I/O 2023")
     .content("Overview of new features in Spring Boot 3.0 and Spring Framework 6.0, including Java 17 baseline, native compilation, and observability improvements.")
     .duration(50)
     .room("Auditorium 1")
     .book(book1)
     .speaker(speaker1)
     .build();

Object 2

Book book2 = Book.builder()
     .id(UUID.randomUUID())
     .title("Spring Security in Action")
     .author("Laurentiu Spilca")
     .ISBN("9781617297731")
     .build();

Speaker speaker2 = Speaker.builder()
     .id(UUID.randomUUID())
     .name("Rob Winch")
     .bio("Spring Security lead")
     .email("rwinch@pivotal.io")
     .build();

Conference conference2 = Conference.builder()
     .id(UUID.randomUUID())
     .date("2023-05-18")
     .linkToYouTubeVideo("https://www.youtube.com/watch?v=wYYKNhCXVVE")
     .title("Securing Spring Boot 3 Applications")
     .conferenceName("Spring I/O 2023")
     .content("Exploration of security features in Spring Boot 3, including OAuth 2.0 and OpenID Connect support, and best practices for securing microservices.")
     .duration(45)
     .room("Room B")
     .book(book2)
     .speaker(speaker2)
     .build();

Object 3

Book book3 = Book.builder()
     .id(UUID.randomUUID())
     .title("Reactive Spring")
     .author("Josh Long")
     .ISBN("9781732910225")
     .build();

Speaker speaker3 = Speaker.builder()
     .id(UUID.randomUUID())
     .name("Josh Long")
     .bio("Spring Developer Advocate")
     .email("jlong@pivotal.io")
     .build();

Conference conference3 = Conference.builder()
     .id(UUID.randomUUID())
     .date("2022-05-26")
     .linkToYouTubeVideo("https://www.youtube.com/watch?v=TKK4Oi1Xc-Y")
     .title("Reactive Spring")
     .conferenceName("Spring I/O 2022")
     .content("Deep dive into reactive programming with Spring, covering Project Reactor, Spring WebFlux, and reactive data access.")
     .duration(55)
     .room("Main Hall")
     .book(book3)
     .speaker(speaker3)
     .build();

Object 4

Book book4 = Book.builder()
      .id(UUID.randomUUID())
      .title("Native Image Definitive Guide")
      .author("Oleg Šelajev")
      .ISBN("9781492078531")
      .build();

Speaker speaker4 = Speaker.builder()
      .id(UUID.randomUUID())
      .name("Sébastien Deleuze")
      .bio("Spring Framework committer")
      .email("sdeleuze@vmware.com")
      .build();

Conference conference4 = Conference.builder()
      .id(UUID.randomUUID())
      .date("2024-05-23")
      .linkToYouTubeVideo("https://www.youtube.com/placeholder_2024") 
      // Placeholder link for future conference video.
      .
      title="Spring Native and GraalVM: The Future of Spring Applications"
      conferenceName="Spring I/O 2024"
      content="Exploring the latest advancements in Spring Native and GraalVM integration, focusing on performance improvements and reduced startup times."
      duration=60 
      room="Innovation Theater"
      book=book4 
      speaker=speaker4 
      build();

1.4 SQL Data Initialization with data.sql

Create a data.sql file in src/main/resources with the following content:

-- Insert Books 
INSERT INTO books (id, title, author, isbn) VALUES 
(UUID(), 'Spring Boot in Action', 'Craig Walls', '9781617292545'),
(UUID(), 'Spring Security in Action', 'Laurentiu Spilca', '9781617297731'),
(UUID(), 'Reactive Spring', 'Josh Long', '9781732910225'),
(UUID(), 'Native Image Definitive Guide', 'Oleg Šelajev', '9781492078531');

-- Insert Speakers 
INSERT INTO speakers (id, name, bio, email) VALUES 
(UUID(), 'Stéphane Nicoll', 'Spring Framework committer', 'snicoll@pivotal.io'),
(UUID(), 'Rob Winch', 'Spring Security lead', 'rwinch@pivotal.io'),
(UUID(), 'Josh Long', 'Spring Developer Advocate', 'jlong@pivotal.io'),
(UUID(), 'Sébastien Deleuze', 'Spring Framework committer', 'sdeleuze@vmware.com');

-- Insert Conferences 
INSERT INTO conferences (id, date, link_to_youtube_video, title, conference_name, content, duration, room, book_id, speaker_id) VALUES 
(UUID(), '2023-05-17', 'https://www.youtube.com/watch?v=TtQTF7M9xPo', 'Spring Boot 3.0 & Spring Framework 6.0: What''s New', 'Spring I/O 2023', 'Overview of new features in Spring Boot 3.0 and Spring Framework 6.0.', 50, 'Auditorium 1', (SELECT id FROM books WHERE title='Spring Boot in Action'), (SELECT id FROM speakers WHERE name='Stéphane Nicoll')),
(UUID(), '2023-05-18', 'https://www.youtube.com/watch?v=wYYKNhCXVVE', 'Securing Spring Boot 3 Applications', 'Spring I/O 2023', 'Exploration of security features in Spring Boot.', 45, 'Room B', (SELECT id FROM books WHERE title='Spring Security in Action'), (SELECT id FROM speakers WHERE name='Rob Winch')),
(UUID(), '2022-05-26', 'https://www.youtube.com/watch?v=TKK4Oi1Xc-Y', 'Reactive Spring', 'Spring I/O 2022', 'Deep dive into reactive programming with Spring.', 55, 'Main Hall', (SELECT id FROM books WHERE title='Reactive Spring'), (SELECT id FROM speakers WHERE name='Josh Long')),
(UUID(), '2024-05-23', 'https://www.youtube.com/placeholder_2024', 'Spring Native and GraalVM: The Future of Spring Applications', 'Spring I/O 2024', 'Exploring advancements in Spring Native.', 60, 'Innovation Theater', (SELECT id FROM books WHERE title='Native Image Definitive Guide'), (SELECT id FROM speakers WHERE name='Sébastien Deleuze'));

1.4.1 UUID

The UUID() function in the SQL statements is a placeholder for generating unique identifiers for each record. In a real-world scenario, UUIDs (Universally Unique Identifiers) are typically generated by the application layer rather than directly in SQL, especially when using JPA with Hibernate in a Spring Boot application.

When using JPA with Hibernate, UUIDs can be automatically generated by annotating the entity’s ID field with @GeneratedValue and specifying a UUID generator strategy.

To generate UUIDs directly in a SQL script for different databases, you can use specific functions provided by each database system. Here are examples for some popular databases:

MySQL

-- MySQL uses the UUID() function to generate a UUID.
INSERT INTO books (id, title, author, isbn) VALUES 
(UUID(), 'Spring Boot in Action', 'Craig Walls', '9781617292545');

PostgreSQL

-- PostgreSQL requires the uuid-ossp extension for generating UUIDs.
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

INSERT INTO books (id, title, author, isbn) VALUES 
(uuid_generate_v4(), 'Spring Boot in Action', 'Craig Walls', '9781617292545');

SQL Server

-- SQL Server uses the NEWID() function to generate a UUID.
INSERT INTO books (id, title, author, isbn) VALUES 
(NEWID(), 'Spring Boot in Action', 'Craig Walls', '9781617292545');

H2 Database

-- H2 uses the RANDOM_UUID() function to generate a UUID.
INSERT INTO books (id, title, author, isbn) VALUES 
(RANDOM_UUID(), 'Spring Boot in Action', 'Craig Walls', '9781617292545');

2 Create Project

Reference code:

  • RestaurantVaadin
  • RestaurantVaadin Lab
  • BooksPageable

Spring Init zip project.

2.1 Project structure

2.2 View

The output we see when running a new Spring Boot Vaadin project hasn’t been configured with any views yet.

Spring Boot with Vaadin is a framework for building web applications using Java. When you start a new project, it creates a basic structure but doesn’t include any views by default. Views in Vaadin are components that represent different pages or sections of your application’s user interface.

The message “No views found” indicates that the application is running, but there are no defined views to display. This is expected in a fresh project.

The output then provides two main options for creating views:

  1. Using Flow: This allows you to code the UI in Java, which is Vaadin’s traditional approach.
  2. Using Hilla and React: This is a newer option that lets you code the UI in TypeScript with React components.

This output is essentially a starting point, prompting you to begin building your application’s user interface by creating views using either of the suggested methods or by following the tutorial for more detailed guidance.

3 Commits

Commits

Back to top

This website is built with Quarto.

Difficulties are just things to overcome, after all. Ernest Shackleton

  • Edit this page
  • Report an issue