mybatis spring mvc application,获取无效的绑定语句(未找到)

ran*_*ndy 18 spring spring-mvc mybatis

这是我使用spring 3.2.4,mybatis-spring-1.2.1的第一个mybatis spring mvc应用程序

当我尝试调用我的web服务时,我收到错误::

org.springframework.web.util.NestedServletException: Request processing failed; 
nested exception is org.apache.ibatis.binding.BindingException: Invalid bound 
statement (not found): 
org.mydomain.formulary.drugmaster.dao.DrugMasterDao.getDrugsWithAlert
Run Code Online (Sandbox Code Playgroud)

我一定错过了一些明显的东西.谢谢你的帮助

以下是我的相关文件: applicationContext.xml

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="formularyDb" />
    <property name="configLocation"  value="file:/web/sites/drugformulary-spring/config/mybatis-config.xml" />
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="org.mydomain.formulary.mappers" />
</bean>
<bean id="DrugMasterDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="mapperInterface" value="org.mydomain.formulary.drugmaster.dao.DrugMasterDao" />
    <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
Run Code Online (Sandbox Code Playgroud)

映射文件 - > /classes/org/mydomain/formulary/mappers/drugmasterDao.xml

<mapper namespace="org.mydomain.formulary.drugmaster.dao.DrugMasterDao">

<select id="getDrugsWithAlert" parameterType="int" resultType="org.mydomain.formulary.drug_master.model.DrugMasters">
    Select drug_id,drug_name,drug_alert_date,drug_alert_source, rownum
    from (select drug_id,drug_name,to_char(drug_alert_datetime,'MM/DD/YYYY') as drug_alert_date ,drug_alert_source, rownum
    from drug_master
    where drug_status ='A' and length(drug_alert) > 0
    order by drug_alert_datetime DESC )
    where
    <if test="_parameter != null">
        rownum &lt; #{count}
    </if>
</select>
</mapper>
Run Code Online (Sandbox Code Playgroud)

映射文件 - > /classes/org/mydomain/formulary/drugmaster/dao/DrugMasterDao.java

public interface DrugMasterDao {
    public List<DrugMasters> getDrugsWithAlert(int count);
}
Run Code Online (Sandbox Code Playgroud)

控制器文件 - > /classes/org/mydomain/formulary/drugmaster/controller/DrugMasterController.java

@Controller
public class DrugMasterController {
@Autowired
DrugMasterService drugMasterService;


@RequestMapping(value = "/drugmaster/withalerts/count/{count}", method = RequestMethod.GET)
public String withAlerts(ModelMap model, @PathVariable int count) {

    List<DrugMasters> drugs = drugMasterService.getDrugsWithAlert(count);

    return null/*for now*/;

}
}    
Run Code Online (Sandbox Code Playgroud)

服务文件 - > /classes/org/mydomain/formulary/drugmaster/service/DrugMasterServiceImpl.java

@Service
public class DrugMasterServiceImpl implements DrugMasterService {

    @Autowired
    DrugMasterDao drugMasterDao;

    public List<DrugMasters> getDrugsWithAlert(int count){
        return drugMasterDao.getDrugsWithAlert(count);
    }
}
Run Code Online (Sandbox Code Playgroud)

mybatis-configfile - >

<configuration>
<settings>
    <setting name="cacheEnabled" value="false" />
    <setting name="lazyLoadingEnabled" value="false" />
</settings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Dar*_*usz 24

我在搜索我的错误时搜索了这个答案.它实际上与OP的问题无关,但例外是相同的,这个问题在谷歌中非常明显.

在我的情况下,我忘了更改映射器命名空间

<mapper namespace="pl.my.package.MyNewMapper">
Run Code Online (Sandbox Code Playgroud)

这导致了同样的问题.


小智 7

阅读本页面中的配置后,我遇到了同样的问题. https://mybatis.github.io/spring/mappers.html#scan

我看到我的配置是正确的.所以调试我的应用程序 发现我的*mappers.xml文件不在路径中.期望一定是.

我在maven项目中的同一个文件夹src"java"中有XML文件.所以当我构建我的应用程序时,文件不会复制到classes文件夹.所以我必须将xml文件移动到文件夹"resources".并解决问题.


Zhe*_*ong 6

因为你的xml在mybatis中没有加载,MapperScannerConfigurer只扫描界面,不扫描xml。有两种方式:

<mappers>
    <mapper resource="org/mydomain/formulary/mappers/drugmasterDao.xml"/>
</mappers>
Run Code Online (Sandbox Code Playgroud)

或者

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
    <property name="dataSource" ref="dataSource"/>
    <property name="mapperLocations" value="classpath*:org/mydomain/**/*.xml"/>
</bean>
Run Code Online (Sandbox Code Playgroud)


小智 -1

DrugMasters 属性定义必须与 drug_id,drug_name,drug_alert_date,drug_alert_source, rownum 关联。

  • 请描述得更具体一些。 (6认同)

归档时间:

查看次数:

61400 次

最近记录:

6 年,4 月 前