Este Tutorial básico irá nos orientar como salvar e carregar uma imagem a partir de banco de dados (MySQL), utilizando Hibernate e Java.

Documentos relacionados
AULA 07 HIBERNATE. Ao término desse capítulo você terá aprendido: Fundamentos do MVC Estrutura dos pacotes no NetBeans

DW2 Desenvolvimento Web 2

Vamos falar de Hibernate?

Introdução ao Hibernate. Hibernate Mapeamento com Anotação. Projeto Desktop Uma Classe. Objetivo. Programas Utilizados

Utilizando Swing com Hibernate

Mecanismo de Persistência

Lista de exercícios I - RESPOSTAS Servlets e banco de dados

Particionamento de Banco com o Hibernate Shards

POO Programação Orientada a Objetos

Desvendando o Hibernate

Tutorial Hibernate + Vraptor para projetos Restful.

Curso de Java. Acesso a banco de dados através do Hibernate. Todos os direitos reservados Klais

Mapeamento Objeto-Relacional (Object Relational Mapping)

HIBERNATE Criando um projeto em Java + Hibernate do zero

INTRODUÇÃO A PERSISTÊNCIA DE DADOS COM HIBERNATE E ANNOTATION

Parte III Persistência entre Modelos de Dados


Escola Secundária de Albufeira. Comandos MySQL. (Páginas Web Dinâmicas: PHP e MySQL) Carlos Nunes


Desenvolvimento para Web em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM Lamarck Heinsch Mestrando PPGI/CT/UFSM

TUTORIAL SOBRE A CONSTRUÇÃO DE APLICAÇÕES EMPREGANDO JAVA, HIBERNATE E MySQL

Testes Unitários com JUnit

INE 5612 Professor: Frank Siqueira. Leonardo Silva Jean Ercilio Thiago

Exercícios de fixação: Listas

Spring Framework. Parte 02 acesso a dados e testes de integração

JPA Java Persistence API. Prof. Ramon Chiara

A Linguagem SQL. Tecnologia de Base de Dados. MSc. Eugénio. Macumbe

Persistência de dados com o

MYSQL: TIPOS DE DADOS. Gilvan Vieira Moura

PROJETO ECLIPSE: Estrutura do projeto: (Dynamic Web Project) LIBS: Java WebDeveloper. Prof. Edson Belém

Blob fields in MySQL Databases

Projeto webservicejax

O JasperReports Studio é uma ferramenta de software que oferece um ambiente visual para criar relatórios para a plataforma Java. É open source.

Web Services. EclipseSDK/DB2 Construindo/Consumindo Serviços

Comandos SQL. Exercícios com o MySQL ou MaridaDB. Prof. Emiliano S. Monteiro

Mapeando Relacionamentos Entre Classes com Anotações Hibernate Por: Raphaela Galhardo Fernandes Gleydson de Azevedo F. Lima

Singleton. Como a maioria dos programadores organizaria o código para acessar informação de configuração? Eis um exemplo:

Análise da Utilização de Padrões no Desenvolvimento de Softwares em Camadas

Como criar um banco de dados usando o mysql

Android Banco de Dados. Ivan Nicoli

Conexão do Banco de Dados localhost

Programação Java. Tratamento de Exceções

Desenvolvimento Web com Java. Sérgio Lopes Caelum -

Hibernate com Anotações

Tratamento de Exceção. Programação Orientada a Objetos Java (Rone Ilídio)

Resolvendo objeto-relacional impedance mismatch com hibernate

Hibernate. Mapeamento Objeto-Relacional. Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior

RELACIONAMENTOS ENTRE OS OBJETOS NO FRAMEWORK HIBERNATE Elio Lovisi Filho 1 Ronney Moreira de Castro 2 RESUMO

Parte II Persistência entre Modelos de Dados

Tratamento de Exceções. Grupo de Linguagens de Programação Departamento de Informática PUC-Rio

Conceito de Campos e Tabelas

Programação para Dispositivos Móveis

Banco de dados. Conteúdo: DDL Prof. Patrícia Lucas

Tutorial: Utilização do sqlite no Android (Parte I)

Conexão Java Mini-curso Hibernate

Fábio Borges de Oliveira. MySQL

Java - Conexão ao Banco de Dados usando JDBC

Criando um Aplicativo para a web com Java EE 7

Evento.java. package dominio;

Hierarquia de classes. Veja as diversas classes do pacote

Introdução. Configuração. Padrão POJO. Framework Pesistência de. Mapeamento Annotation. Objetos. Persistência. Java. Objetos. Prof.

Tratamento de Exceções

Banco de Dados. Banco de Dados

Modelagem de banco de dados com MySQL Workbench

UMA COMPARAÇÃO DE DESENVOLVIMENTO WEB ENTRE A TECNOLOGIA SERVLETS / JSP E O FRAMEWORK VRAPTOR

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

Spring Framework. Parte 04 transações

Criação de uma aplicação Web ASP.NET MVC 4

Refatoração Melhorando o sistema e preparando pra a Web

Introdução. Servlet. Ciclo Vida. Servlet. Exemplos. Prof. Enzo Seraphim

Prof. A. G. Silva. 13 de novembro de Prof. A. G. Silva INE5603 Introdução à POO 13 de novembro de / 1

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Migrations for Java EVOLUINDO SEU BANCO DE MANEIRA INCREMENTAL

Cadastros de dados no MySQL

Criar uma aplicação JPA2 com EclipseLink e H2

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Rápida revisão do Modelo Relacional

Aula Prática JBCD - Introdução

Demoiselle Tutorial Documentation

Agenda. Instalação e configuração. Processamento de comandos SQL com JDBC. Driver JDBC Criação da classe de conexão

DATA ACCESS OBJECT (DAO)

Mapeamento Lógico/Relacional com JPA

Programação Orientada a Objetos SANTOS, Rafael (PLT)

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

JPA Com Hibernate. Paulo Ricardo Lisboa de Almeida. 1 Universidade Positivo

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

Implementar um exemplo de relacionamento entre classes um para muitos (1:N) e um para um (1:1). Sistema para uma Promotora de Evento Agenda Anual

De forma simples, para a execução de comandos SQL com JDBC, precisa-se da instancia de três classes Java. São elas: Nome da classe Função

Funcionamento da Aplicação. Simulações do funcionamento. Simulação SAC

Drive MySql de conexão para Eclipse

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

JPA: Persistência padronizada em Java

Herança entre Entidades JPA. Prof. Fellipe Aleixo

TUTORIAL INTEGRAÇÃO SPRING, HIBERNATE E MYSQL

SQL Básica DDL. Prof. Marcos A. Schreiner. 21 de outubro de Curso de Licenciatura em Computação

JPA Com Hibernate. Paulo Ricardo Lisboa de Almeida. Dados Transientes e Relacionamentos. 1 Universidade Positivo

Transcrição:

Este Tutorial básico irá nos orientar como salvar e carregar uma imagem a partir de banco de dados (MySQL), utilizando Hibernate e Java. Requisitos: Eclipse IDE ( ou qualquer IDE com Java); MySQL (você pode usar qualquer outro banco de dados, certifique-se de alterar o tipo de coluna, se necessário); Hibernate (este é o 4.1.6); PrintScreen Quando implementar seu projeto, ele deve ser parecido com isto: Database Model Primeiro passo, vamos criar o BD, pode ser com este script SQL em MySQL: 01 DROP SCHEMA IF EXISTS `blog` ;

CREATE SCHEMA IF NOT EXISTS `blog` DEFAULT CHARACTER SET latin1 02 COLLATE latin1_swedish_ci ; 03 USE `blog` ; 04 05 -- ----------------------------------------------------- 06 -- Table `blog`.`book` 07 -- ----------------------------------------------------- 08 DROP TABLE IF EXISTS `blog`.`book` ; 09 10 CREATE TABLE IF NOT EXISTS `blog`.`book` ( 11 `BOOK_ID` INT NOT NULL AUTO_INCREMENT, 12 `BOOK_NAME` VARCHAR(45) NOT NULL, 13 `BOOK_IMAGE` MEDIUMBLOB NOT NULL, 14 PRIMARY KEY (`BOOK_ID`) ) 15 ENGINE = InnoDB; Criamos a tabela BOOK bem simples para usar neste tutorial. Book POJO Vamos usar um POJO simples. Um livro tem um ID, e um nome e uma imagem, a qual é representada por um conjunto de bytes. Como vamos persistir uma imagem no banco de dados, temos que usar o tipo BLOB. MySQL tem algumas variações de BLOBs, é possível verificar a diferença entre eles aqui. A diferença entre alguns tipos de do Mysql são: TINYTEXT - 255 bytes TEXT - 65535 bytes MEDIUMTEXT - 16,777,215 bytes (2^24-1) LONGTEXT - 4G bytes (2^32 1) TINYBLOB - 255 bytes BLOB - 65535 bytes MEDIUMBLOB - 16,777,215 bytes (2^24-1) LONGBLOB - 4G bytes (2^32 1) Neste exemplo, vamos usar o Blob Médio, neste trecho de código: 01 package com.test.model; 02 03 import javax.persistence.column;

04 import javax.persistence.entity; 05 import javax.persistence.generatedvalue; 06 import javax.persistence.id; 07 import javax.persistence.lob; 08 import javax.persistence.table; 09 10 @Entity 11 @Table(name="BOOK") 12 public class Book { 13 14 @Id 15 @GeneratedValue 16 @Column(name="BOOK_ID") 17 private long id; 18 19 @Column(name="BOOK_NAME", nullable=false) 20 private String name; 21 22 @Lob 23 @Column(name="BOOK_IMAGE", nullable=false, columndefinition="mediumblob") 24 private byte[] image; 25 26 public long getid() { 27 return id; 28 29 30 public void setid(long id) { 31 this.id = id; 32 33 34 public String getname() { 35 return name; 36 37 38 public void setname(string name) { 39 this.name = name; 40 41 42 public byte[] getimage() { 43 return image;

44 45 46 public void setimage(byte[] image) { 47 this.image = image; 48 49 Hibernate Config Este arquivo de configuração contém as informações necessárias para conectar ao banco de dados (hibernate.cfg.xml). <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.driver</proper ty> <property name="hibernate.connection.url">jdbc:mysql://localhost/blog</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.dialect">org.hibernate.dialect.mysqldialect</property> <property name="connection.pool_size">1</property> <property name="show_sql">true</property> </session-factory> </hibernate-configuration> Hibernate Util A classe HibernateUtil ajuda a criar a SessionFactory do arquivo de configuração Hibernate. package com.test.hibernate; import org.hibernate.sessionfactory; import org.hibernate.cfg.annotationconfiguration; import com.test.model.book; public class HibernateUtil { private static final SessionFactory sessionfactory; static {

try { sessionfactory = new AnnotationConfiguration().configure().addPackage("com.test.model") //the fully qualified package name.addannotatedclass(book.class).buildsessionfactory(); catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); public static SessionFactory getsessionfactory() { return sessionfactory; DAO Nesta classe, criamos dois métodos: um para salvar uma instância Book no banco de dados e outro para carregar uma instância Book, do banco de dados. package com.test.dao; import org.hibernate.hibernateexception; import org.hibernate.session; import org.hibernate.transaction; import com.test.hibernate.hibernateutil; import com.test.model.book; public class BookDAOImpl { /** * Inserts a row in the BOOK table. * Do not need to pass the id, it will be generated. * @param book * @return an instance of the object Book public Book savebook(book book) { Session session = HibernateUtil.getSessionFactory().openSession(); Transaction transaction = null; try { transaction = session.begintransaction(); session.save(book); transaction.commit(); catch (HibernateException e) { transaction.rollback(); finally { session.close(); return book; /**

* Delete a book from database * @param bookid id of the book to be retrieved public Book getbook(long bookid) { Session session = HibernateUtil.getSessionFactory().openSession(); try { Book book = (Book) session.get(book.class, bookid); return book; catch (HibernateException e) { finally { session.close(); return null; Test Para testá-lo, primeiro é necessário criar uma instância de Book e definir uma imagem para o atributo de imagem. Para isso, é preciso carregar uma imagem do Computador, localizado na pasta de imagens. Então, podemos chamar a classe DAO e salvar no banco de dados. Então, podemos tentar carregar a imagem. Só para ter certeza que é a mesma imagem que carregamos e salvá-lo no BD. package com.test.test; import static org.junit.assert.assertnotnull; import java.io.file; import java.io.fileinputstream; import java.io.fileoutputstream; import org.junit.afterclass; import org.junit.beforeclass; import org.junit.test; import com.test.dao.bookdaoimpl; import com.test.model.book; public class TestBookDAO { private static BookDAOImpl bookdao; @BeforeClass public static void runbeforeclass() { bookdao = new BookDAOImpl(); @AfterClass public static void runafterclass() { bookdao = null;

/** * Test method for {@link com.test.dao.bookdaoimpl#savebook(). @Test public void testsavebook() { //File file = new File("images\\extjsfirstlook.jpg"); //windows File file = new File("images/extjsfirstlook.jpg"); byte[] bfile = new byte[(int) file.length()]; try { FileInputStream fileinputstream = new FileInputStream(file); fileinputstream.read(bfile); fileinputstream.close(); catch (Exception e) { Book book = new Book(); book.setname("ext JS 4 First Look"); book.setimage(bfile); bookdao.savebook(book); assertnotnull(book.getid()); /** * Test method for {@link com.test.dao.bookdaoimpl#getbook(). @Test public void testgetbook() { Book book = bookdao.getbook((long) 1); assertnotnull(book); try{ //FileOutputStream fos = new FileOutputStream("images\\output.jpg"); //windows FileOutputStream fos = new FileOutputStream("images/output.jpg"); fos.write(book.getimage()); fos.close(); catch(exception e){ Para verificar se ele foi realmente salvou, vamos verificar a tabela do Book: