Skip to content

Paso 5: Data Access

5.1: JPA Entity

java
// BlankEntity.java (Infrastructure Layer)
package com.blanksystem.blank.service.data.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.UUID;

@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "blank", schema = "blank")
public class BlankEntity {
     @Id
     private UUID id;
}

5.2: JPA Repository Interface

java
// BlankJPARepository.java
package com.blanksystem.blank.service.data.repository;

import com.blanksystem.blank.service.data.entity.BlankEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.UUID;

public interface BlankJPARepository extends JpaRepository<BlankEntity, UUID> {}

5.3: Mapper (MapStruct)

java
// BlankDataAccessMapper.java
package com.blanksystem.blank.service.data.mapper;

import com.blanksystem.blank.service.domain.entity.Blank;
import com.blanksystem.blank.service.data.entity.BlankEntity;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface BlankDataAccessMapper {

     BlankEntity blankToBlankEntity(Blank blank);
     Blank blankEntityToBlank(BlankEntity blankEntity);
}

5.4: Repository Adapter (Port Implementation)

java
// BlankRepositoryImpl.java (Implementation del Output Port)
package com.blanksystem.blank.service.data.adapter;

import com.blanksystem.blank.service.data.mapper.BlankDataAccessMapper;
import com.blanksystem.blank.service.data.repository.BlankJPARepository;
import com.blanksystem.blank.service.domain.entity.Blank;
import com.blanksystem.blank.service.domain.ports.output.repository.BlankRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.Optional;
import java.util.UUID;

@Component
public class BlankRepositoryImpl implements BlankRepository {

     private final BlankJPARepository repository;
     private final BlankDataAccessMapper blankDataAccessMapper;

     public BlankRepositoryImpl(
         BlankJPARepository repository,
         BlankDataAccessMapper blankDataAccessMapper
     ) {
         this.repository = repository;
         this.blankDataAccessMapper = blankDataAccessMapper;
      }

     @Override
     public Blank createBlank(Blank blank) {
         return blankDataAccessMapper.blankEntityToBlank(
             repository.save(
                 blankDataAccessMapper.blankToBlankEntity(blank)
             )
         );
      }

     @Override
     public Optional<Blank> findbyId(UUID blankId) {
         return repository.findById(blankId)
             .map(blankDataAccessMapper::blankEntityToBlank);
      }

5.5: Database Migration (Liquibase)

yaml
db/changelog/db.changelog-master.yaml
databaseChangeLog:
     - include:
          file: db/changelog/ddl-v.0.0.1.yaml

db/changelog/ddl-v.0.0.1.yaml
databaseChangeLog:
     - changeSet:
          id: 01_blank_create_schema
          author: lg
          changes:
             - sql:
                  sql: "CREATE SCHEMA IF NOT EXISTS blank"
     - changeSet:
          id: 02_blank_create_blank_table
          author: lg
          changes:
             - createTable:
                  schemaName: blank
                  tableName: blank
                  columns:
                     - column:
                          name: id
                          type: UUID
                          constraints:
                             primaryKey: true
                             nullable: false

Released under the MIT License.