2016-08-02 33 views

Antwort

0

Sie können den SQL-Code durch Schreiben von SqlCustomizer protokollieren.

import org.skife.jdbi.v2.StatementContext; 
import org.skife.jdbi.v2.sqlobject.SqlStatementCustomizer; 
import org.skife.jdbi.v2.sqlobject.SqlStatementCustomizerFactory; 
import org.skife.jdbi.v2.sqlobject.SqlStatementCustomizingAnnotation; 
import org.skife.jdbi.v2.tweak.StatementCustomizer; 

import java.lang.annotation.*; 
import java.lang.reflect.Method; 
import java.sql.PreparedStatement; 
import java.sql.SQLException; 

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.TYPE) 
@SqlStatementCustomizingAnnotation(LogSqlFactory.Factory.class) 
public @interface LogSqlFactory { 

    static class Factory implements SqlStatementCustomizerFactory { 

     @Override 
     public SqlStatementCustomizer createForMethod(Annotation annotation, Class sqlObjectType, Method method) { 
      return null; 
     } 

     @Override 
     public SqlStatementCustomizer createForType(Annotation annotation, Class sqlObjectType) { 
      return q -> q.addStatementCustomizer(new StatementCustomizer() { 
       @Override 
       public void beforeExecution(PreparedStatement stmt, StatementContext ctx) throws SQLException { 
        System.out.println(stmt.toString()); 
       } 

       @Override 
       public void afterExecution(PreparedStatement stmt, StatementContext ctx) throws SQLException { } 

       @Override 
       public void cleanup(StatementContext ctx) throws SQLException { } 
      }); 
     } 

     @Override 
     public SqlStatementCustomizer createForParameter(Annotation annotation, Class sqlObjectType, Method method, Object arg) { 
      return null; 
     } 
    } 

} 

Gerade diese Anmerkung enthalten und diese in SQLObject verwenden. In Ihrem Fall verwenden diese Anmerkung wie dieser,

@LogSqlFactory 
public inteface myinteface{ 
@SqlQuery("select :c1 from tablename where cond = :cd") 
    String returnMeValue(@Bind("c1") String c1, @Bind("cd") Integer cd); 
} 

Wenn Sie benutzerdefinierte Logger für die Protokollierung verwenden, dann beforeExecution Methode.

+0

Hat nicht für mich gearbeitet –

0

Verwenden Sie die DBIFactory von Dropwizard? Es konfiguriert JDBI, um diesen Weg aus der Box zu protokollieren.