From e51834c899ff20781295410961934eb06239385c Mon Sep 17 00:00:00 2001 From: Kamal Wickramanayake Date: Sat, 16 May 2026 21:18:32 +0530 Subject: Added spring-boot sample applications --- .../com/example/spring/bank/customer/Customer.java | 66 ++++++++++++++++++++++ .../spring/bank/customer/CustomerManager.java | 17 ++++++ .../spring/bank/customer/CustomerManagerImpl.java | 45 +++++++++++++++ .../spring/bank/customer/CustomerRepository.java | 7 +++ 4 files changed, 135 insertions(+) create mode 100644 spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/Customer.java create mode 100644 spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManager.java create mode 100644 spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManagerImpl.java create mode 100644 spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerRepository.java (limited to 'spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer') diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/Customer.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/Customer.java new file mode 100644 index 0000000..43bf0a6 --- /dev/null +++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/Customer.java @@ -0,0 +1,66 @@ +package com.example.spring.bank.customer; + +import java.util.List; + +import com.example.spring.bank.account.Account; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; + + + +@Entity +public class Customer { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String name; + + public Customer() { + super(); + } + + public Customer(String name) { + super(); + this.name = name; + } + + @OneToMany(mappedBy = "customer") +// @OneToMany + private List accounts; + + public List getAccounts() { + return accounts; + } + + public void setAccounts(List accounts) { + this.accounts = accounts; + } + + 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; + } + + @Override + public String toString() { + return "Customer [id=" + id + ", name=" + name + "]"; + } + +} diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManager.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManager.java new file mode 100644 index 0000000..1560672 --- /dev/null +++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManager.java @@ -0,0 +1,17 @@ +package com.example.spring.bank.customer; + +import java.util.Optional; + +import com.example.spring.bank.account.Account; + +public interface CustomerManager { + + public Customer create(Customer customer); + + public Optional findById(Long customerId); + public Iterable findAll(); + + public void addAccount(Customer customer, Account account); + + // Other methods +} diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManagerImpl.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManagerImpl.java new file mode 100644 index 0000000..05b3fdc --- /dev/null +++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerManagerImpl.java @@ -0,0 +1,45 @@ +package com.example.spring.bank.customer; + +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.example.spring.bank.account.Account; + +import jakarta.transaction.Transactional; + +@Service +public class CustomerManagerImpl implements CustomerManager { + + @Autowired + private CustomerRepository customerRepository; + + @Override + @Transactional + public Customer create(Customer customer) { + return customerRepository.save(customer); + } + + @Override + public Optional findById(Long customerId) { + return customerRepository.findById(customerId); + } + + @Override + public Iterable findAll() { + return customerRepository.findAll(); + } + + @Transactional + @Override + public void addAccount(Customer customer, Account account) { + // May not work is the customer is detached. + // customer.getAccounts().add(account); + + // Access the Customer again - so that it would not be a detached entity. + customerRepository.findById(customer.getId()).get().getAccounts().add(account); + } + + // Other methods +} \ No newline at end of file diff --git a/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerRepository.java b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerRepository.java new file mode 100644 index 0000000..8695d66 --- /dev/null +++ b/spring-boot/04-bank-jpa-rest/src/main/java/com/example/spring/bank/customer/CustomerRepository.java @@ -0,0 +1,7 @@ +package com.example.spring.bank.customer; + +import org.springframework.data.repository.ListCrudRepository; + +public interface CustomerRepository extends ListCrudRepository { + +} \ No newline at end of file -- cgit v1.2.3