Open leandromoraesrj opened 2 years ago
Para usar o Lombok:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
Instalar o plugin no eclipse via eclipse plugin installer (Install new software > Add)
Depois reinicie o eclipse;
mais detalhes no site: https://dicasdejava.com.br/como-configurar-o-lombok-no-eclipse/
O que o Lombok faz é substituir os gettrs, settrs, toString, equal, HashCodes e contrutores (com e sem argumentos) por uma notação, fazendo com que os gettrs e settrs etc sejam gerados na compilação (maven install);
Ao incluir a notação "@Data", as outras serão incluídas automaticamente, ficando apenas, necessário, informar a notação dos construtores.
Quando estiver sendo usado numa classe generalizada, não deve informar o @HashCodeEquals nas classes filhas:
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "dac_alter_cond_insc_oficio")
public class DacAlteracaoOficioCondicaoInscricaoEstadual extends Dac {
}
Você pode adicionar o Lombok e deixar algum Settr etc específico para qualquer Enuns, Entity e Dto.
OBS: no Enum funciona somente: @Getter e @AllArgsConstructor o @Setter tem que ser no campo
@Getter
@AllArgsConstructor
public enum SituacaoCadastralEnum {
ATIVO(1, "Ativo"), INATIVO(2, "Inativo"), INEXISTENTE(3, "Inexistente");
@Setter
private int cod;
@Setter
private String descricao;
public static SituacaoCadastralEnum toEnum(int cod) {
for (SituacaoCadastralEnum a : SituacaoCadastralEnum.values()) {
if (cod != 0 && a.getCod() == cod) {
return a;
}
}
return null;
}
}
Exemplo para um campo @Transient:
@Setter(value = AccessLevel.NONE)
@Transient
protected Integer codigoIbge;
Para mapear uma Entity (View) somente readonly, basta colocar @Immutable: OBS: Não colocar os gettrs faz com que não seja possível usar DTOs corretamente
@Immutable
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "UF")
public class Uf implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "SG_UF", length = 2)
private String sigla;
OBS: no repository não estender ao JpaRepository para não habilitar "save" etc e deixar somente os abaixo:
List<?> findAll();
List<?> findAll(Sort sort);
List<?> findAllById(Iterable<?> siglas);
Optional<?> getById(String sigla);
long count();
boolean existsById(ID id);
Exemplo do Builder para instanciar o objeto (new object();):
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ContribuinteResponseDto {
private Long inscricaoEstadual;
private String cnpj;
private String cpf;
private String raizCnpj;
private Integer condicaoInscricaoId;
private Integer regimeApuracaoId;
public ContribuinteResponseDto toDto(Contribuinte contribuinte) {
return ContribuinteResponseDto.builder()
.cnpj(contribuinte.getCnpj())
.cpf(contribuinte.getCpf())
.raizCnpj(contribuinte.getRaizCnpj())
.condicaoInscricaoId(contribuinte.getCondicaoInscricao().getId())
.regimeApuracaoId(contribuinte.getRegimeApuracao().getId())
.build();
}
}
OBS: Foi necessário informar uma notação nas coleções ao usar o @Builder, conforme:
@Builder
class MyEntity {
@Builder.Default
private Set<String> children = new HashSet<>();
}
Como usar enum com e sem Lombok