Looks like there’ll be about one more day of working through this tutorial series. There as a lot of info covered today, and rather than trying to force myself to finish, I’m just going to call it quits at a good stopping point.
On top of all of the notes down below from today’s work, I also have a few other topics that I need to do some more reading on:
- method references
- lambda expressions
- the
Optional
Type
Anyways, here’s today’s notes.
Other Ways of Starting a Spring Boot App
- There are other ways of starting a new Spring Boot app aside from the Maven method above
Spring Initializer
- Located on the spring website: https://start.spring.io
- Lets you select the type of project, as well as the version of spring boot that you want to use
- Lets you supply the Group and Artifact for the project
- Finally, allows you to supply the list of dependencies you want to add to the application
- There’s a full list you can expand and select from, or type them in manually
- Finally you can hit generate project, and it will create a link for you to download the generated project
Spring Boot CLI
- Look on google for install link
- Allows you to bootstrap a project from a Groovy template script
- This is pretty much only used for quick prototyping, this isn’t something that you would use in a production environment.
- Here’s a sample example of a
hello-world
rest api:
1
2
3
4
5
6
7
8
|
@RestController
class ApplCtrl {
@GetMapping("/")
String app() {
"Hello World"
}
}
|
- By running
./spring run hello.groovy
, the CLI will create an entire application from it (will be up and running)
- IDE has an option to create a new Spring starter project
- Gives you all of the same options that the initializer gives you
- Will actually download the zip file from the start website and then import it for you automatically (just saves you one step of importing the project)
Customizing Spring Boot
- This is when you need to change some parameters that aren’t satisfied by the default installation
- This is done via a property file (the “easiest way”), which is spring related
- For example, let’s look at changing the default port that comes up at run time
- Create the new file under the
/src/main/resources
directory
- Inside the file, add
server.port=8081
- When you run the app again, it will start up on port 8081 instead
- The properties that can go in this file can be found here
Connecting to a DB
- This is done through the Spring JPA
- Java Persistence API
- Allows for Object - Relational Mapping
Setting up the Project
- Create a new project using the initializr tool
- Need the following dependencies: Web, JPA, Apache Derby (embedded db instance for prototyping)
- In Intellij, go back to the main screen and click on import and then select the pom file
- It will pull in the project and download everything that it needs
Switching from Static Data to DB
- We first need to tell JPA that we have a data model that needs to be converted to a DB record
- This is done by using the
@Entity
annotation on the model class
- Need to give the JPA the primary key
- Field level annotation
@Id
- Need to update our service so that it will connect over to the database instead of our premade data
- This is handled by a new interface file which will allow us to extend a bunch of built in functionality from the
CrudRepository
class
- Your basic get, post, update, delete functionality is already baked in, there’s no need to write these database calls yourself
- Any calls that require more work (filtering) would just plug into the file
1
2
3
4
5
6
7
|
package io.springboot.topic;
import org.springframework.data.repository.CrudRepository;
public interface TopicRepository extends CrudRepository<Topic, String> {
}
|
- Then in order to access this baked in functionality, we’ll wire in an instance of that interface file which will give us our functionality calls
1
2
|
@Autowired
private TopicRepository topicRepository;
|
Get All
- In order to get all of the records from the database for the specific resource, we can run a
.findAll()
on the instance of our interface
- Note that the
findAll()
will return an iterable
1
2
3
4
5
6
|
public List<Topic> getAllTopics() {
List<Topic> topics = new ArrayList<>();
topicRepository.findAll()
.forEach(topics::add);
return topics;
}
|
Add
- In order to add a record we can use the
save
method.
1
2
3
|
public void addTopic(Topic topic) {
topicRepository.save(topic);
}
|
Get One
- The sample tutorial uses a method that’s now deprecated in later releases
- To get a single record, you can use
findById
, but you also need to extend it with a orElse
method, as it returns back an Optional
1
2
3
|
public Topic getTopic(String id) {
return topicRepository.findById(id).orElse(null);
}
|
Update
- Just need to use the
save
method again. No difference between add and update
Delete
- Use the
deleteById
method (video says delete, but that’s deprecated)
1
2
3
|
public void deleteTopic(String id) {
topicRepository.deleteById(id);
}
|
💚