https://github.com/aledsz/rarframework-java
RAR Framework in Java
https://github.com/aledsz/rarframework-java
Last synced: 10 months ago
JSON representation
RAR Framework in Java
- Host: GitHub
- URL: https://github.com/aledsz/rarframework-java
- Owner: aleDsz
- License: mit
- Created: 2017-08-17T20:00:34.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2017-08-27T22:08:03.000Z (over 8 years ago)
- Last Synced: 2025-02-23T05:30:39.583Z (10 months ago)
- Language: Java
- Size: 52.7 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# RAR Framework in Java [](https://travis-ci.org/aleDsz/rarframework-java)
## 1. Introdução
Após ter criado o mesmo framework, originalmente em [PHP](https://github.com/aleDsz/rarframework), percebi que eu teria a mesma necessidade de um ORM em outras linguagens. Assim como eu precisei quando comecei a utilizar o Java em ambiente profissional e, com a praticidade que eu tinha em PHP, resolvi adaptar para Java.
## 2. Como Funciona
Através do pacote `java.sql`, é possível realizar uma conexão com vários tipos de banco de dados. Além disso, por meio do `Generics`, é possível acessar o conteúdo de um objeto e obter todas as informações necessárias para criar uma instrução SQL.
Neste caso, uma classe deve seguir o seguinte modelo:
```java
package br.com.aledsz.rarframework;
import br.com.aledsz.rarframework.database.objects.DbColumnAttribute;
import br.com.aledsz.rarframework.database.objects.DbTableAttribute;
@DbTableAttribute(databaseName = "mysql", tableName = "contacts")
public class Contact {
@DbColumnAttribute(fieldName = "id", primaryKey = true, size = 11, type = "Integer")
public Integer id;
@DbColumnAttribute(fieldName = "name", primaryKey = false, size = 120, type = "String")
public String name;
@DbColumnAttribute(fieldName = "email", primaryKey = true, size = 120, type = "String")
public String email;
@DbColumnAttribute(fieldName = "phone", primaryKey = false, size = 30, type = "String")
public String phoneNumber;
}
```
## 3. Como Utilizar
Para que você possa utilizar todos as funcionalidades do framework no seu ambiente, você pode criar 1 (ou mais, dependendo da sua forma de trabalho) classe para acessar ao banco de dados de forma genérica.
```java
package br.com.aledsz.rarframework;
import br.com.aledsz.rarframework.database.DatabaseFactory;
import br.com.aledsz.rarframework.database.command.CommandContext;
import br.com.aledsz.rarframework.database.data.DataContext;
import br.com.aledsz.rarframework.database.enums.TiposSelect;
import br.com.aledsz.rarframework.database.objects.ObjectContext;
import br.com.aledsz.rarframework.database.sql.*;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
/**
* @author aleDsz
*/
public class ModelDataAccess {
public void create(T obj) throws Exception {
try {
ObjectContext objContext = new ObjectContext<>(obj);
DataContext dataContext = DatabaseFactory.getInstanceOfDataAccess(objContext.getDatabase());
SqlStatementInsert sqlStatement = new SqlStatementInsert<>(obj);
dataContext.begin();
CommandContext commandContext = new CommandContext(objContext.getDatabase(), sqlStatement.getSql());
commandContext.executeQuery();
dataContext.commit();
} catch (IOException | SQLException ex) {
throw ex;
}
}
public void save(T obj) throws Exception {
try {
ObjectContext objContext = new ObjectContext<>(obj);
DataContext dataContext = DatabaseFactory.getInstanceOfDataAccess(objContext.getDatabase());
SqlStatementUpdate sqlStatement = new SqlStatementUpdate<>(obj);
dataContext.begin();
CommandContext commandContext = new CommandContext(objContext.getDatabase(), sqlStatement.getSql());
commandContext.executeQuery();
dataContext.commit();
} catch (IOException | SQLException ex) {
throw ex;
}
}
public void remove(T obj) throws Exception {
try {
ObjectContext objContext = new ObjectContext<>(obj);
DataContext dataContext = DatabaseFactory.getInstanceOfDataAccess(objContext.getDatabase());
SqlStatementDelete sqlStatement = new SqlStatementDelete<>(obj);
dataContext.begin();
CommandContext commandContext = new CommandContext(objContext.getDatabase(), sqlStatement.getSql());
commandContext.executeQuery();
dataContext.commit();
} catch (IOException | SQLException ex) {
throw ex;
}
}
public T find(T obj) throws Exception {
try {
T object = null;
ObjectContext objContext = new ObjectContext<>(obj);
DataContext dataContext = DatabaseFactory.getInstanceOfDataAccess(objContext.getDatabase());
SqlStatementSelect sqlStatement = new SqlStatementSelect<>(obj);
dataContext.begin();
CommandContext commandContext = new CommandContext(objContext.getDatabase(), sqlStatement.getSql(TiposSelect.ByKey));
object = objContext.getObject(commandContext.executeReader());
dataContext.commit();
return object;
} catch (IOException | SQLException ex) {
throw ex;
}
}
public List findAll(T obj) throws Exception {
try {
List objects = null;
ObjectContext objContext = new ObjectContext<>(obj);
DataContext dataContext = DatabaseFactory.getInstanceOfDataAccess(objContext.getDatabase());
SqlStatementSelect sqlStatement = new SqlStatementSelect<>(obj);
dataContext.begin();
CommandContext commandContext = new CommandContext(objContext.getDatabase(), sqlStatement.getSql(TiposSelect.All));
objects = objContext.getObjects(commandContext.executeReader());
dataContext.commit();
return objects;
} catch (IOException | SQLException ex) {
throw ex;
}
}
}
```
**OBS.:** Você não precisa criar a classe de forma genérica, você pode criar uma classe de acesso a dados para cada entidade que você criar no modelo citado acima.
E para que o ORM consiga se conectar com o banco de dados, você precisa criar um arquivo de configuração com o nome: `config.properties` e ele deve seguir o modelo abaixo:
```java
mysql.host = localhost
mysql.port = 3306
mysql.type = mysql
mysql.user = root
mysql.pwd = 123
mysql.db = database_test
```
**OBS.:** Através da propriedade `databaseName` da anotação de classe, é possível utilizar inúmeros banco de dados diferentes, assim ele deve ser diferenciado no arquivo `config.properties`. Por exemplo, se você tiver um banco de dados `sqlite` e um `mysql`, seu arquivo deverá estar definido desta forma:
```java
mysql.host = localhost
mysql.port = 3306
mysql.type = mysql
mysql.user = root
mysql.pwd = 123
mysql.db = database_test
sqlite.host = data/testDb.db
sqlite.port =
sqlite.type = sqlite
sqlite.user =
sqlite.pwd =
sqlite.db =
```
## 4. Como Contribuir
Para contribuir, você pode realizar um **fork** do nosso repositório e nos enviar um Pull Request.
## 5. Doação
Caso queria fazer uma doação para o projeto, você pode realizar [aqui](https://twitch.streamlabs.com/aleDsz)
## 6. Suporte
Caso você tenha algum problema ou uma sugestão, você pode nos contatar [aqui](https://github.com/aleDsz/rarframework-net/issues).
## 7. Licença
Cheque [aqui](LICENSE)