MyBatis错误:绑定语句无效(未找到)

时间:2017-07-20 06:35:34

标签: mybatis

当我尝试使用MyBatis执行简单查询时,这是堆栈跟踪:

{s1, s2, s3} -> $s1@$s2@$s3

这是我班上的一个方法:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ppcredit.gypsophila.mapper.GypsophilaVarsStatisticsMapper.selectBySql
    at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:225)
    at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48)
    at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58)
    at com.sun.proxy.$Proxy110.selectBySql(Unknown Source)

在这种情况下,需要直接执行SQL语句,sql如下:

/**
 * use the sql to query result
 *
 * @param sql
 * @return
 */
List<LinkedHashMap<String, Object>> selectBySql(String sql, Map<String, Object> parms);

可以在SELECT VELOCITY_VARS FROM PPC_GYPSOPHILA_VARS_STATISTICS WHERE SCENARIO_ID=#{scenarioId} and TACTIC_ID=#{flowId} and CREATE_USER=#{userId}

中找到sql的所有参数

我做了一些研究,但没有一个解决方案对我有用。我的Mapper类似乎有一些问题,但我不知道什么是错的。 有没有人知道这里有什么问题? 提前致谢

1 个答案:

答案 0 :(得分:0)

我将假设公共接口GypsophilaVarsStatisticsMapper以正确的方式实现了selectBySQL。如果您使用它,我认为您是导入注释:

import com.ppcredit.gypsophila.mapper.entity.GypsophilaVarsStatisti‌​cs;
import org.apache.ibatis.annotations.*;
public interface GypsophilaVarsStatisticsMapper { 
    List<GypsophilaVarsStatistics> selectBySQL(String sql,Map parameters);
      /**your code**/

我同样会想,你有一个类(我们称之为测试),其范围允许调用GypsophilaVarsStatisticsMapper接口(在其他情况下是导入)。我要做的就是文件:

import com.ppcredit.gypsophila.mapper.entity.GypsophilaVarsStatisti‌​cs; 

public class Test { 
           public static void main(String args[]) throws IOException{

              Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
              SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);       
              SqlSession session = sqlSessionFactory.openSession();
              session.getConfiguration().addMapper(GypsophilaVarsStatisticsMapper.class);

              GypsophilaVarsStatisticsMapper mapper = session.getMapper(GypsophilaVarsStatisticsMapper.class); 

              sql_string = 'SELECT VELOCITY_VARS FROM PPC_GYPSOPHILA_VARS_STATISTICS WHERE SCENARIO_ID=#{scenarioId} and TACTIC_ID=#{flowId} and CREATE_USER=#{userId}'
              Map<String,Object) params = getParams() /* Your params */
              List<GypsophilaVarsStatistics> result = mapper.selectBySQL(sql_string, params)

我想你没有使用像Spring这样的依赖注入框架MyBatis。在这种情况下,SqlSessionFactory由此框架提供。