最近来了新东家,不想写xml,所以写动态sql,用Mybatis的提供的动态语句发现了一个坑
我一开始是这样写的
@SelectProvider(type = MesCrudeProvider.class,method = "listByCondition")
List<MesCrude> selectListByCondition(@Param("title") String title,@Param("pageIndex") Integer pageIndex,@Param("pageSize") Integer pageSize,@Param("type") Integer type);
public String listByCondition(@Param("title") String title, @Param("pageIndex") Integer pageIndex, @Param("pageSize") Integer pageSize,@Param("type") Integer type){
return new SQL(){
{
SELECT("*");
FROM("mes_crude");
if(StringUtils.isNotEmpty(title)){
WHERE("title like \"%\"#{title}\"%\"");
}
AND().WHERE("type=#{type} limit #{pageIndex},#{pageSize}");
}
}.toString();
}
然后一直报错
Caused by: org.apache.ibatis.builder.BuilderException: Error creating SqlSource for SqlProvider. Method 'listByCondition' not found in SqlProvider 'com.info315.files.dao.mysql.provider.MesCrudeProvider'.
at org.apache.ibatis.builder.annotation.ProviderSqlSource.<init>(ProviderSqlSource.java:57)
at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.getSqlSourceFromAnnotations(MapperAnnotationBuilder.java:408)
... 50 more
找了好久终于知道什么问题了
原因是新东家的mybatis包是3.2的
请看源码
参数只能为一个!!!坑死我了!!
然后改成这个以后就好了。。。。
@SelectProvider(type = MesCrudeProvider.class,method = "selectListByCondition")
List<MesCrude> selectListByCondition(HashMap<String,Object> params);
mybatis 3.4以上版本就支持多参数了!!!切记切记!!!