Ola pessoal do Guj venho aqui pedir um favor a vocês xD, recentemente eu fiz uma classe baseado numa classe de um amigo meu que ele tinha feito em PHP
basicamente é uma classe que faz a comunicação com o banco de dados MySql
e o que gostaria de pedir, era para você derem uma opinião sobre ele, como está, se pode melhor, uma nota, uma critica
Bem espero que gostem, tive um certo trabalho e tal para fazer mas achei que ficou interessante, por isso botei aqui, além disso eu sei que existe outros FrameWork que é melhor e mais completo, e talz, eu só queria saber o que vocês acharam do projeto, se ta legal ou não
“Copyright nos arquivos”
link para download https://www.dropbox.com/s/ypgauectv5n42ld/javaDB.tar.gz
bem acho melhor falar um pouco sobre ele e como usar
Obs : A classes que eu fiz aqui são para o tutorial, mas você podem encapsular os campo a vontade, fazer suas classes da forma que desejar, basta seguir os princípios ditos
[size=18]Básico[/size]
Classe principal do projeto é a “javaDB.model.Model” estenda a classe e coloque duas anotações primeiro a “@TableDB” e indique o nome da tabela dela
segundo a @FieldDB(isId = true) (OBS IMPORTANTE : é necessário ter pelo menos um campo declarado como ID), também sobrescreva o método getConnection
Obs: o nome da variável deve ser igual ao nome colocado no banco de dados caso não seja você deve declarar no @FieldDB o campo “name” contendo o nome da variável no banco
[code]
@TableDB(nome = “Tabela”)
class ClasseModel extends Model {
private Connection conn;
@FieldDB(isId = true)
long id;
public ClasseModel(Connection conn) {
this.conn = conn;
}
@Override
public Connection getConnection() throws SQLException {
return conn;
}
}[/code]
Ao fazer isso você terá seu modelo do banco de dados, agora imaginemos que estamos trabalhando com uma tabela chamada Imagem, e que ela tem duas colunas,
ID (Primary, int), e Arquivo (VarChar(150)) utilizando a base acima basta mudar o nome da tabela e adicionar o campo, assim
[code]
@TableDB(nome = “Imagem”)
class ImagemModel extends Model {
private Connection conn;
@FieldDB(isId = true)
long id;
@FieldDB
String Arquivo
public ImagemModel(Connection conn) {
this.conn = conn;
}
@Override
public Connection getConnection() throws SQLException {
return conn;
}
}[/code]
Blz agora digamos que queremos pegar do banco de dados a imagem cujo o ID seja 5 faça assim
ImagemModel model = new ImagemModel(Connection);
model.id = 5;
System.out.println(model.pesquisa());
Pronto esse código irá pegar no banco de dados a imagem com ID e popular a classe com seu valor
para fazer um Insert/Update e um Delete use :
ImagemModel model = new ImagemModel(Connection);
/**
*seta os valores na instancia
*/
//salvar() faz um insert ou update dependendo do valor do campo ID se ele for igual a zero ele faz um insert se for diferente de zero ele faz um update
model.salvar();
//Deleta do banco de dados de acordo com o id
model.deleta();
[size=18]Nivel medio[/size]
É possível criar uma modelo que se referencia a outro modelo basta adicionar no campo que será a ForeignKey a anotação
“@ForeignKey(Model = Model.class)” assim :
pressupomos que uma imagem possui uma referencia de quem criou ela e que criamos um modelo chamado “UsuarioModel” que deve seguir o modelo base citado lá em cima
[code]
@TableDB(nome = “Imagem”)
class ImagemModel extends Model {
private Connection conn;
@FieldDB(isId = true)
long id;
@FieldDB
String Arquivo
@FieldDB
@ForeignKey(Model = UsuarioModel.class)
long usuario_id;
UsuarioModel ModelRecursivo;
public ImagemModel(Connection conn) {
this.conn = conn;
}
@Override
public Connection getConnection() throws SQLException {
return conn;
}
}[/code]
Pronto agora nosso modelo imagem, já pode fazer uma pesquisa recursiva basta fazer assim :
ImagemModel model = new ImagemModel(conn);
//Lembre de setar o valor do ID para procurar
//Informe que a pesquisa deve ser recursiva
model.setPesquisaRecursiva(true);
//pesquisa da mesma forma que antes
System.out.println(model.pesquisa());
[size=18]Nivel avançado[/size]
O “FrameWork” também possibilita usar tipos de dados alem dos primitivos como é o exemplo do BufferedImage, é comum usar um campo BLOB no banco para armazenar uma imagem, bem aki também é possível usar se utilizamos um recurso que chamei de “Carregador”
Uma carregador é uma classe abstrata que serve para tratar a informação antes de ir para o banco de dados, e depois de receber do bancos de dados, todo carregador contem dois metodos , o Salvar() e o Popular(), salvar é chamado quando irá adicionar aquele campo no banco de dados e o popular é chamado depois de pegar os valores do banco de dados, um exemplo de Carregador que criei foi o “BufferedImageCarregador”
Observe seus metodos
@Override
public void Salvar(PreparedStatement statement, int pos, Object typeToSave) {
//O statement recebido será nele que deverá adicionar, junto vem o
//int pos que deve ser usado em conjuto com o statment para ele colocar na posisão correta na query
// Ja o typeToSave é o objeto que irá ser salvo no banco de dados, em outras palavras é o valor atual do campo de sua model
try {
ByteArrayOutputStream bytesImg = new ByteArrayOutputStream();
ImageIO.write((BufferedImage) typeToSave, imgType, bytesImg);
bytesImg.flush();
statement.setBytes(pos, bytesImg.toByteArray());
} catch (IOException | SQLException ex) {
Logger.getLogger(BufferedImageCarregador.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public BufferedImage Popula(ModelInfo info, String columnName) {
try {
//ModelInfo é outra classe abstrata que serve para popular a model, isso permite que para popular a classe você possa passar valores que não nessesáriamente
//seja do banco de dados
//columName é o nome da colula deve ser usada junto com a ModelInfo para pegar o valor que veio do banco de dados
//Observe que no caso pelo campo no banco de dadose ser um BLOB ele volta sendo um Byte array então por isso que eu passo como
//class byte[].class pois o objeto é um Byte array
return ImageIO.read(new ByteArrayInputStream(info.getObject(columnName, byte[].class)));
} catch (IOException ex) {
Logger.getLogger(BufferedImageCarregador.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
Esse é o exemplo de um carregar aconselho a você ler a classe carregador pode tirar algumas duvidas
Mas vamos para de falar, como usa um Carregador? Basta você adicionar ele estaticamente na classe Model, assim :
no caso estou adicionando um carregador “BufferedImageCarregador” ele recebe um parâmetro que é para determinar o tipo da imagem, alem disso
ele recebe um segundo parâmetro, serve para indica qual classe a variável deve ter para se utilizar esse carregador, como no caso é para BufferedImagem.
Model.addCarregador(new BufferedImageCarregador("jpg"), BufferedImage.class);
Utilizando o carregador tem alguns exemplos de classes na raiz do projeto está no arquivo Teste.java, ele mostra o exemplo usando carregadores.
[code]
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.Serializable;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javaDB.Anotations.FieldDB;
import javaDB.Anotations.TableDB;
import javaDB.Ultil.Carregador.BufferedImageCarregador;
import javaDB.Ultil.Carregador.SerializableCarregador;
import javaDB.model.Model;
import javax.imageio.ImageIO;
/**
-
Copyright © 2010-2013 Victor Lacerda.
-
Permission is hereby granted, free of charge, to any person obtaining a copy
-
of this software and associated documentation files (the “Software”), to deal
-
in the Software without restriction, including without limitation the rights
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-
copies of the Software, and to permit persons to whom the Software is
-
furnished to do so, subject to the following conditions:
-
The above copyright notice and this permission notice shall be included in
-
all copies or substantial portions of the Software.
-
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-
THE SOFTWARE.
-
@author Victor Lacerda victorgerin@live.com
*/
public class Teste {public static void main(String[] args) throws SQLException, IOException {
Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost/Banco”, “User”, “Senha”);//Teste BufferedImagem //Adiciona um carregador para tratar os arquivos que forem BufferedImagem Model.addCarregador(new BufferedImageCarregador("jpg"), BufferedImage.class); //Gera uma nova instancia da classe passando uma connection como parametro ClasseModelImagem instanciaDoModelo1 = new ClasseModelImagem(conn); //Gera uma BufferedImagem como qualquer outra instanciaDoModelo1.setImagem(); //Salva a model no banco de dados se o ID não for zero então irá fazer um inser no DB instanciaDoModelo1.salvar(); //Remove o carregador adicionado Model.getCarregador(BufferedImage.class); //Teste Serializable //Adicona um carregador para tratar as classes ClasseModelSerializable.ClasseSerializable Model.addCarregador(new SerializableCarregador(), ClasseModelSerializable.ClasseSerializable.class); //Gera uma nova instancia da classe passando uma connection como parametro ClasseModelSerializable instanciaDoModelo2 = new ClasseModelSerializable(conn); //Cria uma instancia da classe "ClasseSerializable" normalmente instanciaDoModelo2.setClass(); //Salva a model no banco de dados se o ID não for zero então irá fazer um inser no DB instanciaDoModelo2.salvar();}
}
@TableDB(nome = “Tabela”)
class ClasseModelImagem extends Model {
private Connection conn;
@FieldDB(isId = true)
private long id;
@FieldDB
private BufferedImage imagem;
public ClasseModelImagem(Connection conn) {
this.conn = conn;
}
public void setImagem() throws IOException {
imagem = ImageIO.read(new URL("http://rack.0.mshcdn.com/media/ZgkyMDEyLzEyLzA0L2I1L3doZXJlZG9nb29nLmJoTi5qcGcKcAl0aHVtYgk5NTB4NTM0IwplCWpwZw/4931e287/304/where-do-google-doodles-come-from--ff2932470c.jpg"));
}
public BufferedImage getImagem() {
return imagem;
}
@Override
public Connection getConnection() throws SQLException {
return conn;
}
}
@TableDB(nome = “Tabela”)
class ClasseModelSerializable extends Model {
private Connection conn;
@FieldDB(isId = true)
private long id;
@FieldDB
private ClasseSerializable CLASS;
public ClasseModelSerializable(Connection conn) {
this.conn = conn;
}
public void setClass() {
CLASS = new ClasseSerializable();
CLASS.INTERGER = 20;
CLASS.STRING = "String teste Serializable";
}
public ClasseSerializable getClase() {
return CLASS;
}
@Override
public Connection getConnection() throws SQLException {
return conn;
}
public class ClasseSerializable implements Serializable {
int INTERGER;
String STRING;
}
}[/code]