Olá pessoal!
É claro que não é pretenção minha criar um ORM tão poderoso como JPA ou Hibernate. Mas é interessante imaginarmos como sobreviveriamos sem eles. O que você faria?
Para uma grande maioria, uma das vantagens dos ORMs JPA e Hibernate é a não necessidade de saber SQL ou de trabalhar com transactions. Bem, para algumas pessoas talvez isso possa não ser uma vantagem. Eu sou uma delas.
SQL, é a linguagem propria dos bancos de dados como MySQL, Firebird, SqlServer e outros. Por isso não acredito que exista uma forma de fugir dela. Entendo as dificuldades dos objetos relacionais e as vantagens de se trabahar com OO. Para mim esta é a vantagem dos ORMs como JPA e Hibernate, mas isso não significa que precisamos fugir da linguagem SQL para solucionar este problema. Eu tive uma boa experiência com o Linq to SQL e foi inspirado nele que tentei fazer este pequeno ORM sem fugir do SQL. Tentei manter o máximo possível a semelhnça com o SQL. É claro que este é apenas um pequeno exemplo (rascunho) e ainda existe muito o que melhorar. Ainda não elaborei uma documentação nem me ative muito com as convenções de escrita do java. Mesmo assim espero este exemplo sirva de inspiração para outros. Apartir de agora, tentarei ser o mais breve possivel. Não queremos uma curva pequena de aprendizado?
O exemplo testeOrm possui os seguintes arquivos:
Os arquivos que poderão ser alterados pelo usuario são:
DialectMySQL.java ­ poderia ser um para Postgre
Frame1.java – se o usuario quiser melhorar a forma de salvar os pojos
As interfaces geradoras dos aliases e pojos
Pojos – o que já estamos acostumados a utilizar
Aliases – objeto responsavel pelo crud da entidade. Cada entidade possui o seu aliase
MyConnections.java – onde controlo minhas conexões
UsuarioBu.java – exemplo de CRUD das entidades pessoa e usuario
o primeiro passo é criar os arquivos que gerarão nossos pojos. Exemplo:
após prontas nossas interfaces executar o arquivo Frame1. Exemplo:
O primeiro textfield deve ser colocado o caminho das interfaces que representam nossas entidades.
O segundo, não tive tempo de implementar. Seria onde os arquivos seriam salvos.
No package name coloque o nome do pacote dos pojos.
Clique em criar pojos.
O out put do seu IDE mostrará as strings geradas para o SQL, Aliases e pojos.
Exemplo do SQL gerado:
CREATE TABLE IF NOT EXISTS `Usuario` (
`idUsuario` INT(11) AUTO_INCREMENT ,
`login` VARCHAR(16) NOT NULL ,
`senha` VARCHAR(32) NOT NULL ,
`ativo` BOOL NOT NULL ,
`dataEntrada` DATE NOT NULL ,
`dataSaida` DATE ,
`idPessoa` INT(11) NOT NULL ,
PRIMARY KEY (`idUsuario`) ,
UNIQUE KEY `login` (`login`) ,
KEY `idPessoa` (`idPessoa`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 C
COLLATE=latin1_swedish_ci AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `Pessoa` (
`idPessoa` INT(11) NOT NULL AUTO_INCREMENT ,
`nome` VARCHAR(60) NOT NULL ,
`cpfcnpj` VARCHAR(14) NOT NULL ,
`endereco` TEXT(400) ,
`telefone` VARCHAR(12) ,
PRIMARY KEY (`idPessoa`) ,
UNIQUE KEY `cpfcnpj` (`cpfcnpj`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 C
COLLATE=latin1_swedish_ci AUTO_INCREMENT=1 ;
ALTER TABLE `Usuario` ADD CONSTRAINT `Pessoa_idPessoa_FK` FOREIGN KEY (`idPessoa`) REFERENCES `Pessoa` (`idPessoa`) ON DELETE CASCADE ON UPDATE CASCADE;
Agora é só criar a logica do negócio. No exemplo está no executavel UsuarioBu.java.
A
Ao executá­lo veremos isso:
SELECT person.idPessoa, person.nome, person.cpfcnpj, person.endereco, person.telefone FROM Pessoa as person WHERE person.cpfcnpj = '00000000001' SELECT user.idUsuario, user.login, user.senha, user.ativo, user.dataEntrada, user.dataSaida, user.idPessoa FROM Usuario as user WHERE user.login = 'teste3' Já existe um usuario com este login.
1 nome teste 00000000000
17 nome teste 00000000001
BUILD SUCCESSFUL (total time: 0 seconds)
Observem que para o exemplo mostrarTodos() podemos ter a ajuda do autocompletar para evitarmos algum erro de sql:
String str = contexto
.Select( alias_Usuario.idUsuario, alias_Pessoa.nome, alias_Pessoa.cpfcnpj )
.From(alias_Usuario)
.Join(Join.INNER, alias_Pessoa)
.On(on) .getQueryString();
É isso ai pessoal. Era isso que eu queria falar para vocês.
Para quem quiser entrar em contato comigo para sugestões, nvos projetos ou parcerias:
Luiz Augusto Prado
luiz­[email protected]
www.codigorapido.com.br
Download

Olá pessoal! É claro que não é pretenção minha