* Visite o ALJUG - http://aljug.blogspot.com - Noticias sobre a comunidade java alagoana e do mundo * Visite o blog Mundo Gamificado www.mundogamificado.com.br - E vamos mudar o mundo! *
Mostrando postagens com marcador Hibernate. Mostrar todas as postagens
Mostrando postagens com marcador Hibernate. Mostrar todas as postagens

segunda-feira, 18 de janeiro de 2016

Gravando arquivo do tipo byte no banco de dados com Hibernate

Olá pessoal,

Neste post vou mostrar como pode salvar um arquivo, que pode ser pdf e imagem, no banco de dados com hibernate.

Vamos colocar a mão na massa!

Primeiro iremos classificar a variável como abaixo:

    private byte[] arquivo;

Com isso você vai colocar as anotações do hibernate como no exemplo 2 deste link da documentação.

    @Lob

    @Basic(fetch = FetchType.LAZY)*

    @Column(name="arqdocumento")

    private byte[] arquivo;


* Você pode ver uma dica de quando usar o EAGER e LAZY.

Com isso você já configurou para que no banco de dados recebe o tipo byte.

E para buscar o documento você pode usar o Criteria do hibernate como abaixo:

public byte[] fileRecord(int iddocumento){
 byte[] arq = null;
    try{
        Criteria cr = sessao.createCriteria(Documento.class);
        cr.add(Restrictions.eq("iddocumento", iddocumento));
        arq = (byte[]) cr.list().get(0).getArquivo();
    }catch(Exception e){
        e.printStackTrace();
    }finally{
       sessao.close();
    }
       return arq;
 }

Essa é umas das formas que pode ser capturada , espero ter ajudado.

No próximo post vou mostrar como exibir um relatório em uma nova aba.

Até mais!

sábado, 1 de agosto de 2015

Componentes Dinâmicos com Primefaces - Parte 3(Final)

Olá pessoal, vamos para parte final do desenvolvimento dos componentes dinâmicos com primefaces, reitero aqui que da mesma forma que estou fazendo com os componentes do primefaces, também é feito com os componentes do jsf HtmOutputText e HtmlInputText.

Então vamos continuar, ficamos na parte da declaração abaixo:



expressionFactory = app.getExpressionFactory();


Lembrando que o expressionFactory é para criar uma fabrica de expressão EL e assim poder declarar a expressão como costumamos no JSF #{bean.variavel}.


Então com a instância criada vamos definir valores para os componentes como, por exemplo o valor e o For do OutputLabel já concatenando com a ID do InputText, abaixo:
 opl.setValue("Campo " + (z + 1) + ": ");
            opl.setId("lbcampo" + z);
            opl.setFor("campoID" + z);
            in = new InputText();
            in.setId("campoID" + z);
            in.setSize(2);



Você pode está perguntando porque só instanciou ou criou uma nova instância para o inputText, lembra que vamos incluir a expressionLanguage neste componente e por isso devemos fazer essa ação, caso não fizesse isso iria aparecer o NullPointerException. Pronto com isso já sabemos que de acordo com o valor do Z teremos Campo 1,2,3,4...
 <p:outputLabel value="Campo 1" id="lbcampo0" for="campoID0"/>

E também sabemos temporariamente que o inputText ficará
<p:inputText id="campoID0" size="2"/>

Agora vamos colocar a cereja no bolo, ou seja, vamos incluir a expressão para que o componente pegue o valor na view e para isso faça como abaixo:
ValueExpression ve = expressionFactory.createValueExpression(elContext, "#{bean.campo[" + z + "]}", String.class);

Veja que agora declaramos o ValueExpression, com isso estamos adicionando o que acostumamos fazer somente na view, incluir um parâmetros para capturar o valor que o usuário digitou. Note que é uma expressionFactory criando o valor pegando o contexto e definido a classe que terá o valor na view, neste caso o valor foi uma string, mas poder ser mudado de acordo com sua necessidade. Agora devemos adicionar a ValueExpression para ser incluída no componente inputText
 in.setValueExpression("value", ve);

O nome value dever ser colocado sempre, pois representa a tag value do componente inputText e a variavel ve que é o EL. Para dar o toque final deveremos adicionar os componentes no panel que criamos no inicio como abaixo:
panel.getChildren().add(opl);
            panel.getChildren().add(in);

Com isso adicionamos os componentes dinâmicos dentro do panel.

Então é isso pessoal, qualquer dúvida estou a disposição só comentar aqui ou então enviar um e-mail. Até a próxima!

sábado, 13 de junho de 2015

Gráficos[Charts] Primefaces com JSF/Hibernate

Olá pessoal.

Estamos de volta e agora para atualizar um post antigo meu quando eu falei sobre o pieChart com hibernate.

O que me motivou esse post foi a Cláudia que devido ao post antigo entrou em contato comigo e pediu uma ajuda com o código dela, com isso decidir fazer um exemplo funcionando para todos terem como referência, pois eu fiquei sem entender no manual do usuário e também no showcase, pois em uma mostra um exemplo e no showcase mostra com outro exemplo. 

Neste exemplo estou usando a versão 5.2 do primefaces, todo código está no bitbucket.

Eu criei duas classes:
1. Info que pode ser alguma dado para fazer de referência, como ,por exemplo, o dólar que sempre tem uma variação a cada dia.
2 . InfoValores que seria uma classe para registrar a variação da referencia cadastrada, neste caso como estamos falando do dólar, com isso temos que cadastrar a data e o valor.

Para este exemplo vamos usar o tipo LineChart, para isso vamos criar o método para inicializar o gráfico como o código abaixo:

 
private LineChartModel linearModel;//Declarando a varivel

/**
* Método de Inicialização
*/
public LineChartModel  initLineModel(){
 
 linearModel = new LineChartModel();
 
 LineChartSeries series1 = new LineChartSeries();
       //Serie1 é a linha que será os dados para demonstração do gráfico
 List<InfoValores> dados = getListaDeValores();
 series1.setLabel("Dollar");
 
 for (int x=0;x < dados.size();x++ ){
  series1.set(dados.get(x).getDatacadastro(),dados.get(x).getValorinfo());
 }
 //Aqui é o mais importante, quando você diz que os dados atribuídos 
        //deverão aparecer no gráfico
       linearModel.addSeries(series1);
       linearModel.setZoom(true);
       linearModel.getAxis(AxisType.Y).setLabel("Dólar");
 /** Adicionando o formato de informações do tipo data ao eixo X 
  * da Classe Axis.
  */
 DateAxis axis = new DateAxis("Datas");
        axis.setMin(menorData.toString());
       /**
  * O set Tick FOrmat é o formato que vai aparece no gráfico, 
            neste caso é o brasilseiro
  * e pode ser encontrado em http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html
  */
 axis.setTickFormat("%#d %#m %Y");
 linearModel.getAxes().put(AxisType.X,axis);
 
 return linearModel;
 
}
Depois deveremos informar ao código que a incialização deverá ser atribuido a variavel que vai ser atribuido na view como no código abaixo:

public void createLineModels(){
        //A variavél recebe a inicialização
 linearModel = initLineModel();
        linearModel.setTitle("Variação do Dollar");
        linearModel.setLegendPosition("e");
        Axis yAxis = linearModel.getAxis(AxisType.Y);
        Axis xAxis = linearModel.getAxis(AxisType.X);
}


Para que funcione devemos informar ao ciclo do JSF que depois de construir incialize o gráfico como no código abaixo:
  @PostConstruct
     public void init() {
         createLineModels();
     }

Já na página XHTML você declara da mesma forma que está no showcase do Primefaces:

<p:chart type="line" model="#{infoValoresController.linearModel}" style="height:300px;"/>



View:



Então Pessoal, fica atento no bitbucket que estarei atualizando para aprimorar cada vez mais o código, qualquer dúvida é só da o feedback deste post. Até a próxima!

quinta-feira, 27 de junho de 2013

PieChart Primefaces with Hibernate

Post updated in the new version of Primefaces

  Hello everybody, I come once again leaving a nice tip of programming. Now I'm a bit of time due to the projects and also that realizing a dream of being a teacher, which is rare these days, a college, but teaching database that is also part of my daily life, very good by the way.
 As the title of this post, I will talk about assembling a PieChart with hibernate as soon as notice that we run a little, but I'll do everything for everyone to understand what I'm doing.
  First of all I have two classes, andamento  and status do andamento class at the first have information like: id, comment, status, date and justification, on the other have only id and description. What is the purpose? The goal is to show how the graph gaits exist for each status description, for example, the status "In Progress" has 32 records andamentos,the status "In review" is 5 andamentos records, and so on. So with that we have a scenario to play around with the logic and data, as well as the Data Access Objects will do our research, we first get all the descriptions of existing status in the database :
Code 0:
 public List <Status> Search() {  
     return findAll(Status.class);  
   }  
In class piechart that equals the bean primefaces site´s sample added in the method private void createPieModel () the class variable tempos as follows:
Code 1:
  private List<String> status;
  statusdescricao = stDAO.Search();  
     for (int z = 0; z < statusdescricao.size();z++){  
     status.add(statusdescricao.get(z).getDescricao());  
     }  
  This will be added to this list all the descriptions as you can see below:
Code 2:
 System.out.println("Lista do Status "+status);  
     >> Lista do Status [Em Andamento, Análise, Em avaliação]  

  We conclude the first step, the next step is to bring the figures for these descriptions so it is easy when you know who's the description, because only need a where clause description = String variable. How do the following:
Code 3:
  public int numberTotalOfAndamento(String status) throws NoResultException  

  Making logic with inner join, as in this case I am dealing with two different tables, try the amount of tempos when the id of the status equals the id field in the table id_status progress, for example:
Code 4:
 Query query = manager.createQuery("SELECT count(*) FROM "  
         + "andamento a inner join status s"  
         + " on(a.status = s.id) where s.descricao=:descricao");  
     query.setParameter("descricao", status);  

  In this case ,poses no the function Group by. Done that would add to the method createPieModel the following code snippet:

Code 5:
  for (int i = 0;i < status.size();i++){  
       pieModel.set(status.get(i), andDAO.numberTotalOfAndamento(status.get(i)));  
     }  

  Note that with the list, in this case, with three dice will have to walk, so with each line is we'll get to the method get (index), because the method requires pieModel.set a string and a variable numeral, so in the above code the description "in Progress", represented in code 2, the variable would be the method numberTotalOfAndamento will search and return an integer to compose this method. With that would pieModel.set ("In Progress", 5); Five was the result that was returned.

And to complete the method would look like this:
Code 6:
 private void createPieProcesso() {   
     pieModel = new PieChartModel();   
     statusdescricao = stDAO.Search();   
     for (int z = 0; z &lt; statusdescricao.size();z++){  
     status.add(statusdescricao.get(z).getDescricao());  
     }  
     System.out.println("Lista do Status "+status);  
     for (int i = 0;i &lt; status.size();i++){  
       pieModel.set(status.get(i), andDAO.numberTotalOfAndamento(status.get(i))); 
     }  

And in the JSF page would be represented by the code:
Code 7:
  <p:pieChart value="#{charts.pieModel}" legendPosition="e" fill="false" showDataLabels="true"   
         title="Estatística dos Andamentos" style="width:400px; height:300px" sliceMargin="5" diameter="150" />  

The result will be:
I have helped over this tip up any day.