0% found this document useful (0 votes)
39 views

(Optional) Lab 5.1: Integrating Spring and Jpa

This document discusses using Spring Data to create a Spring Data JPA repository interface for the MusicItem entity. It instructs the reader to: 1. Define an interface for ItemRepository that extends the Spring Data JPA interface for MusicItem. This will provide standard query methods. 2. Autowire an ItemRepository in a test class and use the query methods to interact with the database through the repository interface.

Uploaded by

darwinvargas2011
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
39 views

(Optional) Lab 5.1: Integrating Spring and Jpa

This document discusses using Spring Data to create a Spring Data JPA repository interface for the MusicItem entity. It instructs the reader to: 1. Define an interface for ItemRepository that extends the Spring Data JPA interface for MusicItem. This will provide standard query methods. 2. Autowire an ItemRepository in a test class and use the query methods to interact with the database through the repository interface.

Uploaded by

darwinvargas2011
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 19

In this lab, we will work with the Spring/JPA integration

[OPTIONAL] LAB 5.1: INTEGRATING


SPRING AND JPA
LAB
SYNOPSI Lab


S
Overview: In this (optional) lab, we will work with the
Spring/JPA integration, including
– Setting up a
LocalContainerEntityManagerFactoryBean
– Finishing a JPA-based Repository class that injects an
EM

 Builds on previous labs: None


– The new root lab directory is workspace\Lab05.1

 Approximate Time: 35-45 minutes

 Note: We will be using the Apache Derby database

Lab 5.1: Spring and JPA 2


DOMAIN Lab
MODEL

Objects already using


ItemRepository will
never know we have
switched to Derby!
Injects em

Future Proof!
ApplicationContext

Lab 5.1: Spring and JPA 3


THE
MOVING Lab


PARTS
You will focus on the following classes in this lab
– MusicItem : Our entity class - now persisted to the DB
– ItemRepository : API to define data access
• JpaItemRepository : Concrete implementation that uses JPA
– Catalog : Client API for services provided
• CatalogImpl : Concrete implementation of Catalog

 You will also work with the following Spring configuration


– Datasource: Already configured to connect to our Derby database
– JpaVendorAdapter: Will configure for Hibernate
– EntityManagerFactory: We'll inject our datasource and vendor
adapter

Lab 5.1: Spring and JPA 4


THE Lab

 CONFIGURATION
We use @Configuration metadata in this lab

 The database configuration is done in SpringRepositoryConfig


– In com.javatunes.config
– Configuration strings are externalized in a properties file
• Makes it easy to change configuration without recompiling
• e.g. database, driver class, or URL

 Bean definitions and wiring are done using @Configuration


– In SpringRepositoryConfig and SpringServicesConfig
– Both are imported by SpringConfig

 This lab is structured as a Spring Boot/JPA/Maven project


– With a pom.xml for maven (the only XML used)

Lab 5.1: Spring and JPA 5


LAB PREPARATION - Lab
BRING IN PROJECT
Tasks to Perform
 Close all open files and projects

 Import an existing Maven project called Lab05.1 into the


workspace
– File | Import … | Maven | Existing Maven Projects
– Click Next, Browse to the workspace\Lab05.1 folder, click
Finish
– There is no need to add Java libraries to this project
– Maven will pull in all dependencies needed via pom.xml

Lab 5.1: Spring and JPA 6


SETUP/CREATE THE Lab
DERBY DATABASE
Tasks to Perform
 Open the StudentWork\Spring\Derby folder (part of the lab setup)
– See notes for Unix variants (1)
 Start the Derby database server:
– Execute dbStart.cmd (you can double-click on it)
– This starts a standalone Derby server that can accept network
connections to the database
– You should see output like that below in the command window

 Create the database:


– Execute dbCreate.cmd (you can double-click on it)
– This creates the JavaTunesDB database which we'll use in the labs

Lab 5.1: Spring and JPA 7


FINISH
ENTITY/DATABASE Lab


CONFIGURATION Tasks to Perform
Open MusicItem for review (there is nothing to do here)
– In com.javatunes.domain in the src folder
– Note how the table name is specified (since it doesn't match the class)
– Note the id and generation strategy
– Note that the names of most persisted fields match the column names
of the table, and therefore need no annotations (1)
– Note that MusicCategory is Enumerated, and persisted as a string
– Note that the DateTimeFormatter is transient
• It it won't be persisted (used internally for formatting only)

 Open jdbc.properties in the src folder for review/editing


– Look for the TODOs to complete the following:
url: jdbc:derby://localhost:1527/JavaTunesDB
persistenceUnitName: javatunes

Lab 5.1: Spring and JPA 8


COMPLETE REPOSITORY Lab
AND CONFIGURATIONQ
Tasks to Perform
 Open SpringRepositoryConfig (com.javatunes.config)
– Configure the reading of the jdbc.properties file (by a property source)
– Configure injection of the environment
– Configure lookup of any needed properties from jdbc.properties
• Search for "TODO", including the quotes, to find them
– Add an @Bean declaration for the itemRepository() bean (1)
• Return type: ItemRepository, and actual object: JpaItemRepository

 Open JpaItemRepository for editing


– This is our JPA ItemRepository implementation
– Inject the EntityManager (what annotation do you use?)
– Review get(Long id) - It returns what the entity manager finds
– Note: Most of the methods are not finished - that's OK
• The lab focuses on the Spring configuration, not working with JPA
Lab 5.1: Spring and JPA 9
FINISH OTHER Lab
CONFIGURATION
Tasks to Perform
 Open SpringServicesConfig.java for editing
– Inject into the repository variable
– Complete the catalog() method, and declare it as a (1)

•bean
Return type: Catalog, Actual object: CatalogImpl
• Remember to set the repository for the CatalogImpl
 Open SpringConfig.java for review (There is nothing to do here)
– Note how it imports the @Configuration metadata

 Open CatalogTest.java for review (src/test/java)


– Note the @SpringBootTest to bring in Spring Boot capabilities,
and read our configuration
– It injects the catalog bean, then uses findById() to get a
MusicItem
• Done by JPA, but this is transparent to the client
– It then prints the returned MusicItem to the console
Lab 5.1: Spring and JPA 10
TEST
PROGRA Lab

M Tasks to Perform

 Run CatalogTest as a JUnit test and view the output


– It should successfully find the item by id and pass all tests
– You should also see logging information from both the Spring and JPA
runtimes (we've set the log level to info - see notes)
– That's it – you've successfully configured and used a JPA-based
Repository that uses an injected EM

STOP
Lab 5.1: Spring and JPA 11
Lab 5.2: Spring Data

In this lab, we will work with Spring Data to create a


Spring-Data-JPA repository interface for
MusicItem
LAB
SYNOPSI Lab


S
Overview: In this short lab, we will work with Spring Data
– We will create a Spring Data JPA interface that gives us the
standard Spring Data querying capabilities
– We'll use those methods to query the database.

 Builds on previous labs: None


– We will work in a new project - Lab05.2

 Approximate Time: 15-20 minutes

 We will continue to use the Apache Derby database

Lab 5.2: Spring Data 13


LAB PREPARATION - JPA Lab
LIBRARY / Tasks
PROJECT
to Perform
 Close all open files and projects

 Import an existing Maven project called Lab05.2 into the


workspace
– File | Import … | Maven | Existing Maven Projects
– Click Next, Browse to the workspace\Lab05.2 folder, click
Finish
– There is no need to add Java libraries to this project
– Maven will pull in all dependencies needed via pom.xml

 Make sure the Derby database is running

Lab 5.2: Spring Data 14


DEFINE AND USE A Lab
REPOSITORY
Tasks INTERFACE
to Perform
 Open ItemRepository (com.javatunes.persistence) to edit
– Extend the correct interface to make this a Spring Data JPA repository
for MusicItem
– That's all you need to do - we inherit the pre-defined query
methods (1)
– Note the query methods in the interface - these are custom query
methods that we give you

 Open ItemRepositoryTest.java for editing (src/test/java)


– In com.javatunes.persistence
– Autowire an ItemRepository instance
• Where's the implementation? Given to you!
– Finish the testFindPositive() to find an item by id.
• Use the correct JPA interface method - check what it's called.

Lab 5.2: Spring Data 15


TEST
YOUR Lab

CODE Tasks to Perform

 Right click on ItemRepositoryTest in Package Explorer


– Select Run As | JUnit Test
– You should get the MusicItem with id ==1
– With no query methods implemented by you!!

 Experiment with other Spring Data methods


– size( ) - existing method of CrudRepository
interface
– findByArtist() - also defined in ItemRepository
– Any others you want to try for a few minutes

 Spring Data
– No more is NICE queries
boilerplate !! :-)
STOP
Lab 5.2: Spring Data 16
LAB 5.3: WRITING QUERY
METHODSIn this lab, we create queries in our interface using the
Spring Data Naming Conventions
LAB
SYNOPSI Lab


S
Overview: In this short lab, we will define our own query
method in our repository interface
– We'll use to to query the database.

 Builds on previous labs: Lab05.2


– Continue working in your Lab05.2 project

 Approximate Time: 10-15 minutes

 We will continue to use the Apache Derby database

Lab 5.3: Writing Query Methods 18


DEFINE AND USE A Lab
REPOSITORY
Tasks INTERFACE
to Perform
 Open ItemRepository (com.javatunes.persistence) to
edit
– Add a method to query for items by artist
– Remember - you don't have to implement it !

 Open ItemRepositoryTest.java for editing


– Find the method testFindByArtistPositive()
– Uncomment the @Test to activate the test
– Finish it by calling your new query method to initialize the results
 Run the tests (Right click, Run As | JUnit Test)
– All tests should pass, and show your results on the console

 Spend a few minutes to try other query methods we provide


– And if you like, try defining new ones of your own STOP
Lab 5.3: Writing Query Methods 19

You might also like