java.lang.NoClassDefFoundError

java.lang.NoClassDefFoundError

问题描述:

打断点后发现reader为null,但不知为什么,student.xml中namespace无法解析,还有其他错吗?

相关代码:

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>Mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>


    <repositories>
        <repository>
            <id>aliyun</id>
            <name>aliyun</name>
            <url>https://maven.aliyun.com/repository/public</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
    </dependencies>

</project>

相关代码:

<?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>
              <settings>
                  <setting name="mapUnderscoreToCamelCase" value="true" />
              </settings>

             <environments default="dev">
                 <environment id="dev">
                     <transactionManager type="JDBC"></transactionManager>
                     <dataSource type="POOLED">
                         <property name="driver" value="com.mysql.jdbc.Driver"/>
                         <property name="url" value="jdbc:mysql://localhost:3306/mybatis-imooc?useunicode=true&amp;characterEncoding=UTF-8"/>
                         <property name="username" value="root"/>
                         <property name="password" value="root"/>
                     </dataSource>
                 </environment>


                 <environment id="prd">
                     <transactionManager type="JDBC"></transactionManager>
                     <dataSource type="POOLED">
                         <property name="driver" value="com.mysql.jdbc.Driver"/>
                         <property name="url" value="jdbc:mysql://192.168.1.155:3306/mybatis-imooc?useunicode=true&amp;characterEncoding=UTF-8"/>
                         <property name="username" value="root"/>
                         <property name="password" value="root"/>
                     </dataSource>
                 </environment>
             </environments>


             <mappers>
                 <mapper resource="mappers/student.xml"/>
             </mappers>
        </configuration>

相关代码:

<?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="student">
     <select id="selectAll" resultType="com.imooc.mybatis.entity.Student">
         select * from student order by id
     </select>
</mapper>

相关代码:

package com.imooc.mybatis.entity;

public class Student {
    private int id;
    private int regNo;
    private String name;
    private String sex;
    private int age;
    private String grade;
    private String major;


    public Student() {
    }

    public Student(int id, int regNo, String name, String sex, int age, String grade, String major) {
        this.id = id;
        this.regNo = regNo;
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.grade = grade;
        this.major = major;
    }

    public int getId() {
        return id;
    }

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

    public int getRegNo() {
        return regNo;
    }

    public void setRegNo(int regNo) {
        this.regNo = regNo;
    }

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }


    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", regNo=" + regNo +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                ", grade='" + grade + '\'' +
                ", major='" + major + '\'' +
                '}';
    }
}

相关代码:

package com.imooc.mybatis.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.Reader;

public class MybatisUtils {
    private  static SqlSessionFactory sqlSessionFactory = null;

    static{
        Reader reader = null;
        try {
            reader = Resources.getResourceAsReader("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
            throw new ExceptionInInitializerError(e);
        }
    }


    public static SqlSession openSession(){
        return sqlSessionFactory.openSession();
    }

    public static void closeSqlSession(SqlSession session){
        if(session != null){
            session.close();
        }
    }
}

相关代码:

package com.imooc.mybatis;

import com.imooc.mybatis.entity.Student;
import com.imooc.mybatis.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class MybatisTestor {

    @Test
    public void selectAll(){
          SqlSession session = null;

          try{
              session = MybatisUtils.openSession();
              List<Student> list = session.selectList("student.selectAll");

              for(Student s:list){
                  System.out.println(s);
              }
          }catch(Exception e){
              throw e;
          }finally{
              MybatisUtils.closeSqlSession(session);
          }
    }
}

相关截图:

图片描述

相关截图:

图片描述

相关截图:

图片描述

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2024-06-17 09:41:55

同学你好,老师使用同学提供的代码,没有复现同学的问题。

1.建议同学以复制粘贴的形式提供完整的报错信息;

2.从同学的截图中看到student.xml的文件图标与mybatis-config.xml的文件图标不同,猜测student.xml的文件类型可能有错,建议同学直接在IDEA中新建一般的File类型文件,然后将拓展名写为xml看一下图标是否相同,如果依然有问题,可以复制mybatis-config.xml更改其内容为student.xml中的内容再试一下;

3.看到student.xml中namespace报红色错误,如果上面的方式不能解决问题,建议同学将鼠标放在报错位置上,以复制粘贴的形式提供完整的报错信息。

祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java工程师 2024版
  • 参与学习       2052    人
  • 提交作业       1500    份
  • 解答问题       1324    个

2024重磅革新,超百小时内容豪华升级,加速提升高级技能与高薪就业竞争力 课程紧贴企业最新人才需求,历经7年持续迭代,帮助万名学子入行转行 从零起点到高阶实战,学习路径稳健顺滑,成就从小白到工程师高薪

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师