2016-06-10 5 views
1

Als ich versuchte, SqlProvider zu verwenden, bekam ich eine Ausnahme org.apache.ibatis.reflection.ReflectionException (sagt "There is no getter for property named 'providerTakesParameterObject' in 'class org.apache.ibatis.builder.annotation.ProviderSqlSource'"). Ich googelte es und es scheint, dass ein SqlProvider nicht mehr als ein Argument nehmen kann. Hier ist die Demo-Code:Wie kann `SqlProvider` mehr als 1 Parameter in` MyBatis` aufnehmen?

MyTableMapper.java

public interface MyTableMapper{ 
    @SelectProvider(type=MyTableSqlProvider.class, method="selectSelective") 
    List<MyTable> selectSelective(Date from, Date to, String searchkey); 
} 

MyTableSqlProvider.java

public class MyTableSqlProvider{ 
    public String selectSelective(Date from, Date to, String name) { 
    return new SQL() {{ 
     SELECT("*"); 
     FROM("MyTable"); 
     if(from!=null){ 
      WHERE("createtime >= {#from,jdbcType=TIMESTAMP}"); 
     } 
     if(to!=null){ 
      WHERE("createtime <= {#to,jdbcType=TIMESTAMP}"); 
     } 
     if(!StringUtils.isBlank(name)){ 
      WHERE("title like %{#name,jdbcType=VARCHAR}%"); 
     } 
    }}.toString(); 
} 
} 

Die Codes oben kann nicht ausgeführt werden. Aber wie kann ich dafür sorgen, dass alle Argumente berücksichtigt werden?

Antwort

0

Endlich habe ich den Grund gefunden. Es ist nicht MyBatis Fehler. Ich habe ein Plugin Mybatis-PageHelper verwendet. Die alte Version des Plugins kann die MyBatis 3.4.0 nicht unterstützen. Ich aktualisiere das Plugin und es ist jetzt korrekt.

Verwandte Themen