O projeto foi criado no intuito de aprendizado para reproduzir a e entender como os ORMs funcionam
no mesmo intuito fio desenvolvido para dar mais liberdade e facilidade para manipulação entre multiplos banco de dados uma vez que é possível controlar as conexões.
<repositories>
<repository> <id>myMavenRepo.read</id>
<url>https://mymavenrepo.com/repo/go9Ye7KC7xaSZHqFec9g/</url>
</repository>
</repositories>
<dependency>
<groupId>org.atom</groupId>
<artifactId>atom-framework</artifactId>
<version>3.1.16</version>
<scope>compile</scope>
</dependency>
org.jatom.connection.driver=org.postgresql.Driver
org.jatom.connection.url=jdbc:postgresql://localhost:5432/<db_name>
org.jatom.connection.password=<senha>
org.jatom.connection.user=<user>
org.jatom.connection.schema=true
org.jatom.connection.multi-tenant=true
org.jatom.connection.schema-name=<nome schema>
- schema: caso deseje usar a base como schema insira a propriedade como true, neste caso o nome do banco deverá ser informado
- multi-tenant: Em bases que serão utilizado multiplos bancos
- schema-name: caso a propriedaded multi-tenant for false e o schema for true, deverá ser informado o nome do schema do banco de dados
Caso queira que seja executado scripts de sql nativas poderá ser incluida na pasta resources uma pasta com o nome "databases".
Todos os arquivos .sql que contem neste diretório serão executados assim que o projeto for iniciado ou reiniciado
a biblioteca possui as seguintes anotações:
- @Alias
- @Fk
- @Id
- @Ignore
- @Join
- @ListObject
- @NoEntity
- @SimpleObject
- @TableName
- @Union
Para os exemplos abaixo utilizaremos as seguintes tabelas:
create table if not exists pessoa(
id serial primary key,
nome varchar,
idpessoatipo int
FOREIGN KEY(idpessoatipo) REFERENCES pessoa_tipo(id)
);
create table if not exists pessoa_telefone(
id serial primary key,
telefone varchar,
idpessoa int,
FOREIGN KEY(idpessoa) REFERENCES pessoa(id)
);
create table if not exists cpf(
id serial primary key,
cpfnumero varchar,
idpessoa int,
FOREIGN KEY(idpessoa) REFERENCES pessoa(id)
);
create table if not exists rg(
id serial primary key,
rgnumero varchar,
idpessoa int,
FOREIGN KEY(idpessoa) REFERENCES pessoa(id)
);
create table if not exists pessoa_tipo(
id serial primary key,
descricao varchar
);
Usado para nomear classes que tem nome diferente do banco de dados.
Usado para nomear classes de acordo com os nomes das entidades, caso o nome da entidade no banco de dados seja exatamente igual ao da classe é dispensado o uso desta anotação.
public class Pessoa{
@Id
private int id;
private String nome;
}
ou caso o nome da entidade seja diferente pode colocar como parametro na anotação
@TableName("pessoa_telefone")
public class PessoaTelefone{
@Id private int id;
private String nome;
}
Indica que a classe não é uma entidade do banco de dados.
@NoEntity
public class Documentos{
private Cpf cpf;
private Rg rg;
}
Indica que o objeto é uma entidade mapeada simples
public class Documentos{
@SimpleObject
private Cpf cpf;
@SimpleObject
private Rg rg;
}
Indica que o atributo da classe é uma entidade mapeada que retorna uma lista.
public class Pessoa{
@Id
private int id;
private String nome;
@listObject
private List<PessoaTelefone> telefones;
}
Usado quando existe uma variavel dentro de uma classe que não seja objeto da entidade no banco.
public class Pessoa{
@Id
private int id;
private String nome;
private int idTipoPessoa;
@Ignore
private String descricaoTipoPessoa;
@listObject
private List<PessoaTelefone> telefones;
}
note que a chave de referencia é o idTipoPessoa, neste caso para complementar com a descrição utilizaremos a descricaoTipoPessoa, mas este atributo não pertence a entidade na tabela pessoa, sendo assim quando for salvar o atributo será ignorado.
Indica que o atributo da classe é um campo do tipo identidade
public class Pessoa{
@Id
private int id;
private String nome;
}
pode se ser usado atribuindo o nome do campo na tabela caso o nome da variavel seja diferente:
public class Pessoa{
@Id("id_pessoa")
private int id;
private String nome;
}
Indica que o atributo da classe é um campo referenciado a uma chave estrangeira
o mesmo tem um parâmetro obrigatório que deve ser inserido o nome do campo primario da tabela de referencia:
public class Pessoa {
@Id
private int id;
private String nome;
}
public class PessoaTefone {
@Id
private int id;
private String nome;
@Fk("id")
private int idpessoa;
}
ou:
public class Pessoa {
@Id("id_pessoa")
private int id;
private String nome;
}
public class PessoaTefone {
@Id
private int id;
private String nome;
@Fk("id_pessoa")
private int idpessoa;
}
note que o nome que está no parâmetro é o mesmo do atributo que está como id na classe Pessoa.
Anotação que faz a união de duas tabelas durante uma consulta
Temos o seguinte cenário:
create table if not exists pessoa(
id serial PRIMARY key,
nome varchar(250),
idade int,
idTipoPessoa int
);
create table if not exists tipo_pessoa(
id serial primary key,
descricao varchar
);
onde uma pessoa possui um tipo que é previamente cadastrado podendo ser "Fisica" ou "Juridica"
Podemos abordar o seguinte cenário desta forma:
public class Pessoa{
@Id
private int id;
private String nome;
@SimpleObject
private TipoPessoa tipoPessoa;
@Ignore
private String descricaoTipoPessoa;
@listObject
private List<PessoaTelefone> telefones;
}
entretanto nesta abordagem sera necessário fazer uma consulta a mais na base pois deverá fazer a busca pelo tipo da pessoa que na tabela correspondente
para estes casos pode se usar a abordagem a baixo, aplicando a anotação "@Join"
public class Pessoa{
@Id
private int id;
private String nome;
private TipoPessoa idTipoPessoa;
@Ignore
@Join(reference = TipoPessoa.class,columnName = "descricao",columnReference = "idTipoPessoa")
private String descricaoTipoPessoa;
@listObject
private List<PessoaTelefone> telefones;
}
a anotação Join recebe 3 parâmetros:
- reference: referencia a classe que está mapeada .
- commnName: Nome da coluna ao qual quer trazer o valor na tabela que irá fazer a junção.
- columnReference: atributo da classe que é usada como chave estrangeira .
*** Obs: esta lib encontra-se estavel somente para uso com banco postgres