java - mybatis神奇问题
大家讲道理
大家讲道理 2017-04-17 17:48:45
[Java讨论组]

1.用maven的web模板生成了项目,然后添加了依赖这里应该没有问题


    4.0.0
    com.demo
    SeverDemo
    war
    1.0-SNAPSHOT
    SeverDemo Maven Webapp
    http://maven.apache.org
    
        
            org.mybatis
            mybatis
            3.4.0
        
        
            junit
            junit
            4.11
            test
        
        
            com.alibaba
            fastjson
            1.2.11
        
        
            mysql
            mysql-connector-java
            6.0.2
        
    
    
        SeverDemo
    

2.然后配置了mybatis-config这里应该也没啥问题




    
        
            
            
                
                
                
                
            
        
    
    
        
    

3.设置好实体类和映射文件好像也没啥问题

package com.demo.bean;

import java.util.Date;

/**
 * Created by 73196 on 2016/5/2.
 */
public class Student {
    private int id;
    private String name;
    private Date birthday;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}



    

接下来就是幺蛾子,大神先别看我的思路可能有错

1.在映射文件中他先给我来个这个

暂时先没有管
2.运行,这错误

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.demo.mapper.StudentMapper.selectStudent
### Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.demo.mapper.StudentMapper.selectStudent
    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)
    at com.demo.APP.main(APP.java:22)
Caused by: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.demo.mapper.StudentMapper.selectStudent
    at org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:853)
    at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:686)
    at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:679)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)
    ... 3 more

于是就点开源码看


get参数得到了个null抛出错误,然后我有看是哪个参数?


没错,是id?

这是什么鬼,id为空????????????????

整个项目在此 http://git.oschina.net/slgxmh/SeverDemo-Learn

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
大家讲道理

抓了一下源码 发现以下几个问题
1.映射xml文件的namespace应该是com.demo.mapper.StudentMapper
2.映射xml文件的目录最好是resource下com/demo/mapper比较符合最佳实践,等你以后写Mapper的接口,就不会出奇怪的问题。修改路径时不要忘了同时改mybatis-config.xml里的路径。
3.在映射xml文件里select语句的属性 databaseId="mysql"
这个要去掉
你mybatis-config.xml里并没有提供databaseIdProvider,所以mybatis并不知道当前的databaseId,而你的select语句限定了databaseId,所以就找不到映射语句了。

在我本地修复了以上3个问题后 报错消失。

伊谢尔伦

你这个配置文件写的貌似没有问题啊?难道你的resources文件夹没有放到classpath里???

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号