miércoles, 13 de junio de 2012

Consulta sql a clase o entidad en Hibernate

Algunas veces se tiene una consulta SQL y digamos que se quiere mapear directo a 
la clase. 
 
sess.createSQLQuery("SELECT * FROM DOGS").addEntity(DOG.class);
sess.createSQLQuery("SELECT ID, PEC_NAME FROM DOGS").addEntity(DOG.class);

martes, 12 de junio de 2012

Fecha mayor, fecha menor o igual en Mysql

No es la mejor solución pero si llevas algo de prisa te puede servir.

/*Regresa una fecha igual*/
select * from tabla_fechas
where DATEDIFF(fech_hra_operacion,STR_TO_DATE('19/05/2010','%d/%m/%Y'))=0

cambiar el igual por mayor o menor según se requiera

jueves, 7 de junio de 2012

Formateo de fechas en java

Ya hay muchos post sobre esto pero bueno, aquí un ejemplo.
 
 
SimpleDateFormat formateador = new SimpleDateFormat("EEEEEEEEE dd 'de' MMMMM 'de' yyyy",new Locale("es"));
System.out.println(formateador.format(new Date()));
 
Links consultados.
 
http://www.localeplanet.com/java/es-MX/index.html 

http://chuwiki.chuidiang.org/index.php?title=SimpleDateFormat

Enviar correo(e mail) con imagen en línea o embebida con spring JAVA

Pues a pesar, de que en el proyecto que trabajo ya existe un framework con clases que envían correos, no existe un método que me permita enviar imagenes en línea, así que pense en usar javamail, pero aprovechando que uso spring encontre una forma mucho más fácil. En este link http://static.springsource.org/spring/docs/1.2.x/reference/mail.html dan una explicación. Hice una clase muy generica que se podría mejorar bastante pero por el momento puede servir de base para algunos proyectos. De hecho algunos de mis compañeros  usarán mi clase como base y le agregarán bastantes mejoras gg.

Si usas Spring configura tu config.properties.

mail.smtpHost=127.0.0.1
mail.smtpPort=25
mail.smtpUsername=userSMT9
mail.smtpPassword=12345
mail.charSet=ISO-8859-1

Opcionalmente si quieres evitarte la carga del properties puedes configurar el application-context.xml

    <bean id="mailUtil" class=" com.util.MailUtil">
        <property
            name="useSSL"
            value="${mail.useSSL}" />
        <property
            name="smtpHost"
            value="${mail.smtpHost}" />
        <property
            name="smtpPort"
            value="${mail.smtpPort}" />
        <property
            name="smtpUsername"
            value="${mail.smtpUsername}" />
        <property
            name="smtpPassword"
            value="${mail.smtpPassword}" />
    </bean>

//Esta de abajo es la clase
package com.util;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;




@SuppressWarnings("unchecked")
public class MailUtil {
   
    private boolean useSSL = false;
    private String smtpHost;
    private int smtpPort = 25;
    private String smtpUsername;
    private String smtpPassword;
    private String charSet = "ISO-8859-1";
   
    public boolean isUseSSL() {
        return useSSL;
    }


    public void setUseSSL(boolean useSSL) {
        this.useSSL = useSSL;
    }


    public String getSmtpHost() {
        return smtpHost;
    }


    public void setSmtpHost(String smtpHost) {
        this.smtpHost = smtpHost;
    }


    public int getSmtpPort() {
        return smtpPort;
    }


    public void setSmtpPort(int smtpPort) {
        this.smtpPort = smtpPort;
    }


    public String getSmtpUsername() {
        return smtpUsername;
    }


    public void setSmtpUsername(String smtpUsername) {
        this.smtpUsername = smtpUsername;
    }


    public String getSmtpPassword() {
        return smtpPassword;
    }


    public void setSmtpPassword(String smtpPassword) {
        this.smtpPassword = smtpPassword;
    }


    public String getCharSet() {
        return charSet;
    }


    public void setCharSet(String charSet) {
        this.charSet = charSet;
    }
   
   
    public void sendMail(String from,String to, String html,String subject,HashMap mapaImagenes){
         JavaMailSenderImpl sender = new JavaMailSenderImpl();
         sender.setHost(this.smtpHost);
         sender.setPort(this.smtpPort);
         sender.setUsername(this.smtpUsername);
         sender.setPassword(this.smtpPassword);
         MimeMessage message = sender.createMimeMessage();
         try {
             MimeMessageHelper helper = new MimeMessageHelper(message, true);
             helper.setFrom(from);
             helper.setTo(to);
             helper.setSubject(subject);
             helper.setText(html,true);
             Iterator it = mapaImagenes.entrySet().iterator();
             while (it.hasNext()) {
                  Map.Entry e = (Map.Entry)it.next();
                  Resource resource=new ClassPathResource(e.getValue().toString());
                  helper.addInline(e.getKey().toString(), resource);
             }
           
           
             sender.send(message);
        } catch (MessagingException e) {
            // TODO Auto-generated catch block agregar log
            e.printStackTrace();
        }
    };
}

La forma de uso sería así.
//Forma de uso
 HashMap mapaIdentificador = new HashMap();
        mapaIdentificador.put("identifier1234","resources/mail/header.jpg");// la imagen esta en el package resources
        MailUtil mailUtil= new MailUtil();
  mailUtil.sendMail("administrador@lafabricadesoftware.com","usuario@lafabricadesoftware.com",
 "<html><body><img src='cid:identifier1234'></body></html>"
, "hola Mundo", mapaIdentificador);

martes, 5 de junio de 2012

Eliminado lógico en hibernate

Entendemos por eliminado lógico cuando de una tabla solo se cambia el status del registro, en el proyecto que estoy trabajando se mapean las tablas en xml no con anotaciones.

 < class name="mx.modelo.persona" table="persona" where="eliminado <> 1" >

Ojo si te marca un error en el xml hay que transformar el <>
a & lt;& gt; pero sin espacios.
de esta forma discriminará los registros con el status eliminado.

Si usas anotaciones tal vez este post te sea útil http://featurenotbug.com/2009/07/soft-deletes-using-hibernate-annotations/