7.9.1. CustomerManager Class
The CustomerManager class that is defined next is a kind of business layer between the corresponding controller and the database. We will use it for adding, editing and deleting a customer. All operations in this layer will be performed in a SNAPSHOT-level transaction.
package ru.ibase.fbjavaex.managers;import org.jooq.DSLContext;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.transaction.annotation.Transactional;import org.springframework.transaction.annotation.Propagation;import org.springframework.transaction.annotation.Isolation;import static ru.ibase.fbjavaex.exampledb.Tables.CUSTOMER;import static ru.ibase.fbjavaex.exampledb.Sequences.GEN_CUSTOMER_ID;/*** Customer manager** @author Simonov Denis*/public class CustomerManager {@Autowired(required = true)private DSLContext dsl;/*** Adding a customer** @param name* @param address* @param zipcode* @param phone*/@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.REPEATABLE_READ)public void create(String name, String address, String zipcode, String phone) {if (zipcode != null) {if (zipcode.trim().isEmpty()) {zipcode = null;}}int customerId = this.dsl.nextval(GEN_CUSTOMER_ID).intValue();this.dsl.insertInto(CUSTOMER,CUSTOMER.CUSTOMER_ID,CUSTOMER.NAME,CUSTOMER.ADDRESS,CUSTOMER.ZIPCODE,CUSTOMER.PHONE).values(customerId,name,address,zipcode,phone).execute();}/*** Editing a customer** @param customerId* @param name* @param address* @param zipcode* @param phone*/@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.REPEATABLE_READ)public void edit(int customerId, String name, String address,String zipcode, String phone) {if (zipcode != null) {if (zipcode.trim().isEmpty()) {zipcode = null;}}this.dsl.update(CUSTOMER).set(CUSTOMER.NAME, name).set(CUSTOMER.ADDRESS, address).set(CUSTOMER.ZIPCODE, zipcode).set(CUSTOMER.PHONE, phone).where(CUSTOMER.CUSTOMER_ID.eq(customerId)).execute();}/*** Deleting a customer** @param customerId*/@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.REPEATABLE_READ)public void delete(int customerId) {this.dsl.deleteFrom(CUSTOMER).where(CUSTOMER.CUSTOMER_ID.eq(customerId)).execute();}}
