一直碰到这个问题,学不了了

一直碰到这个问题,学不了了

java.lang.NoClassDefFoundError: Could not initialize class com.imooc.mybatis.uitls.MybatisUtils

    at com.imooc.mybatis.MybatisTestor.testSelectAll(MybatisTestor.java:50)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)


前面好端端的,加了<mapper>之后,不仅selectAll()这个报错,之前测试成功的也报错,都是报这个错

源代码

goods.xml

<?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>
   <select id="selectAll" resultType="com.imooc.mybatis.entity.Goods">
  /* useCache="false"代表不使用缓存*/
       select * from t_goods order by goods_id desc limit 10
   </select>
</mapper>


mabatis-config.xml

<?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="dev">
   <!--        配置环境,不同的环境不同的id名字-->
   <environment id="dev">
       <!--采用JDBC方式对数据库事务进行commit/rollback-->
       <transactionManager type="JDBC"></transactionManager>
       <!--            采用连接池方式管理数据库连接-->
       <dataSource type="POOLED">
           <!--            <dataSource type="com.imooc.mybatis.entity.C3P0DataSourceFactory">-->
           <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
           <property name="url"
                     value="jdbc:mysql://localhost:3306/babytun?useUnicode=true&amp;characterEncoding=UTF-8"/>
           <property name="username" value="root"/>
           <property name="password" value="123"/>
           <!--                <property name="initialPoolSize" value="5"/>-->
           <!--                <property name="maxPoolSize" value="20"/>-->
           <!--                <property name="minPollSize" value="5"/>-->
       </dataSource>
   </environment>
   </environments>
   <mappers>
       <mapper resource="mappers/goods.xml"></mapper>
   </mappers>
</configuration>


工具类

package com.imooc.mybatis.uitls;

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 {
   //    利用static(静态)属于类不属于对象,且全局唯一
   private static SqlSessionFactory sqlSessionFactory = null;
   //    利用静态块在初始类时实例化sqlSessionFactory
   static {
       Reader reader =null;
       try {
            reader = Resources.getResourceAsReader("mybatis-config.xml");
           sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
       } catch (IOException e) {
           e.printStackTrace();
//            初始化错误时,通过抛出异常ExceptionInInitializerError通知调用者
           throw new ExceptionInInitializerError(e);
       }
   }

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

   public static void closeSession(SqlSession sqlSession){
       if (sqlSession!=null){
           sqlSession.close();
       }
   }
}

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

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

1回答
好帮手慕柯南 2019-09-23 18:42:40

同学你好!

同学的mapper文件,忘记写命名空间了呢

http://img1.sycdn.imooc.com//climg/5d88a19509b97b7104180112.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~


  • 提问者 慕哥3346605 #1
    现在加上了还是报同样的错
    2019-09-23 18:44:27
  • 好帮手慕柯南 回复 提问者 慕哥3346605 #2
    同学的代码在老师这里是可以的,同学之前使用c3p0是可以的吗?建议同学将编译生成的target文件删除,重新编译运行测试一下。祝学习愉快~
    2019-09-23 19:03:00
  • Mr__Gao 回复 提问者 慕哥3346605 #3
    同学 你解决这个问题了么,如果解决了请麻烦告诉我一下怎么解决的,我也遇到相同的问题
    2019-11-12 09:48:52
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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