java - mybatis神奇问题
大家讲道理
大家讲道理 2017-04-17 17:48:45
0
2
429

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

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.demo</groupId>
    <artifactId>SeverDemo</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>SeverDemo Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.11</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.2</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>SeverDemo</finalName>
    </build>
</project>

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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatisdemo"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com.demo/mapper/StudentMapper.xml"></mapper>
    </mappers>
</configuration>

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;
    }
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.bean.Student">
    <select id="selectStudent" resultType="com.demo.bean.Student" databaseId="mysql">
        SELECT * FROM student WHERE ID=#{id}
    </select>
</mapper>

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

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 파일 매핑을 위한 네임스페이스는 com.demo.mapper.StudentMapper여야 합니다
2. XML 파일 매핑을 위한 가장 좋은 디렉터리는 com/demo/입니다. 리소스 Mapper는 나중에 Mapper 인터페이스를 작성할 때 더 이상 모범 사례에 부합하지 않습니다. 경로를 수정할 때 mybatis-config.xml의 경로도 동시에 변경하는 것을 잊지 마세요.
3. 매핑 xml 파일에서 select 문의
속성dbId="mysql"을 제거해야 합니다.
mybatis-config.xml에 제공된 데이터베이스IdProvider가 없으므로 mybatis는 알 수 없습니다. 현재 데이터베이스 ID 및 선택 문이 데이터베이스 ID를 제한하므로 매핑 문을 찾을 수 없습니다.

위 3가지 문제를 로컬에서 해결한 후 오류가 사라졌습니다.

伊谢尔伦

작성하신 구성 파일에는 문제가 없는 것 같은데요? 리소스 폴더가 클래스 경로에 있지 않습니까? ? ?

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿