工具类无法初始化

来源:1-5 自由编程

明月_0

2020-03-08 15:20:49

package com.i.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;

/**
* MybatisUtils工具类,创建全局唯一的SqlSessionFactory对象
*/
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);
       }
   }
   /**
    * openSession 创建一个新的SqlSession对象
    * @return SqlSession对象
    */
   public static SqlSession openSession(){
       return sqlSessionFactory.openSession();
   }
   /**
    * 释放一个有效的SqlSession对象
    * @param session 准备释放SqlSession对象
    */
   public static void closeSession(SqlSession session){
       if(session != null){
           session.close();
       }
   }
}



import com.i.mybatis.entity.Student;
import com.i.mybatis.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {

   @org.junit.Test
   public void dynamic(){
       SqlSession session = null;
       try {
           session = MyBatisUtils.openSession();
           Map param = new HashMap();
           param.put("age", 30);
           param.put("sex", "男");
           List<Student> list = session.selectList("student.selectAll");
           for (Student g : list) {
               System.out.println(g);
           }
       }catch (Exception e){
           e.printStackTrace();
       }finally {
           MyBatisUtils.closeSession(session);
       }
   }
}


<select id="selectAll" resultType="com.i.mybatis.entity.Student">
   select * from student order by id;
</select>



<?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">
       <!--配置环境,不用的环境不用的id名字-->
       <environment id="dev">
           <!--采用JDBC方式对数据库进行commit/rollback-->
           <transactionManager type="JDBC"></transactionManager>
           <!--采用连接池方式管理数据库连接-->
           <dataSource type="POOLED">
               <property name="driver" value="com.mysql.jdbc.Driver"/>
               <property name="url" value="jdbc:mysql://localhost:3306/mybatistest?useUnicode=true&amp;characterEncoding=UTF-8"/>
               <property name="username" value="root"/>
               <property name="password" value="root"/>
           </dataSource>
       </environment>
   </environments>

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


java.lang.NoClassDefFoundError: Could not initialize class com.i.mybatis.utils.MyBatisUtils


at Test.dynamic(Test.java:26)

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.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)

at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)

at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)



Process finished with exit code -1



执行,为什么工具类调用不起,直接就到finall模块了

写回答

3回答

好帮手慕柯南

2020-03-08

同学你好!

报错信息:找不到com.i.mybatis.entity这个类

http://img.mukewang.com/climg/5e64c8cc09bb649d07940245.jpg

你这里应该是写Student类,但是只写了包名

http://img.mukewang.com/climg/5e64c8fa093320aa08450156.jpg

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


0

明月_0

提问者

2020-03-08

我怎么都没发现问题,students.xml哪里写错了?



org.apache.ibatis.exceptions.PersistenceException: 

### Error building SqlSession.

### The error may exist in mappers/students.xml

### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'mappers/students.xml'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.i.mybatis.entity'.  Cause: java.lang.ClassNotFoundException: Cannot find class: com.i.mybatis.entity


at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)

at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:52)

at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:36)

at Test.testSqlSessionFactory(Test.java:42)

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.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)

at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)

at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)

Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'mappers/students.xml'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.i.mybatis.entity'.  Cause: java.lang.ClassNotFoundException: Cannot find class: com.i.mybatis.entity

at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:121)

at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:98)

at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:50)

... 24 more

Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'mappers/students.xml'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.i.mybatis.entity'.  Cause: java.lang.ClassNotFoundException: Cannot find class: com.i.mybatis.entity

at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:122)

at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:94)

at org.apache.ibatis.builder.xml.XMLConfigBuilder.mapperElement(XMLConfigBuilder.java:373)

at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:119)

... 26 more

Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.i.mybatis.entity'.  Cause: java.lang.ClassNotFoundException: Cannot find class: com.i.mybatis.entity

at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:118)

at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:102)

at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:137)

at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:130)

at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:120)

... 29 more

Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.i.mybatis.entity'.  Cause: java.lang.ClassNotFoundException: Cannot find class: com.i.mybatis.entity

at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:120)

at org.apache.ibatis.builder.BaseBuilder.resolveAlias(BaseBuilder.java:149)

at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:116)

... 33 more

Caused by: java.lang.ClassNotFoundException: Cannot find class: com.i.mybatis.entity

at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:200)

at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:89)

at org.apache.ibatis.io.Resources.classForName(Resources.java:261)

at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:116)

... 35 more



Process finished with exit code -1





<?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="students">
   <select id="selectAll" resultType="com.i.mybatis.entity.Student">
       select * from student order by id
   </select>
   <select id="daynamicSelect" parameterType="java.util.Map" resultType="com.i.mybatis.entity.Student">
       select * from student
       <where>
           <if test="age!=null">
               and age &gt; #{age}
           </if>
       </where>
   </select>
   <select id="DynamicSelect" parameterType="java.util.Map" resultType="com.i.mybatis.entity">
       select * from stuent
       <where>
           <if test="age!=null">
               and age &gt; #{age}
           </if>
           <if test="sex!=null">
               and sex=#{sex}
           </if>
       </where>
   </select>
</mapper>



0

好帮手慕柯南

2020-03-08

同学你好!

这个错误一般都是配置文件或者mapper文件书写有误。

老师这里测试你的配置文件是没有报错的。说明应该是你的mapper文件写错了。

建议你运行一下之前测试数据库连接是否正确的代码。就可以看到具体的报错信息了

http://img.mukewang.com/climg/5e64b55309aa368708840589.jpg

根据报错信息解决一下。如果不能够解决建议你贴一下具体的错误信息,以及mapper文件

注意:在我要回答中贴出

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

0

0 学习 · 8016 问题

查看课程