編寫的時候遇到這樣一個bug, java.lang.NoClassDefFoundError: Could not initialize class com

糾結了兩天多,但是,沒有找到答案,這個問題的多方提示就是
(1)缺JAR包 (2)JAR包沖突 (3)TOMCAT或Eclipse全路徑中有空格
這些答案都沒有解決我的問題,這個錯誤提示是說我的那個包沒法啟動,很多顯示都是是什么靜態定義必須trycatch,但是我的這個自己簡歷的公共類,這些都寫了.
public class MybatisUtil {
private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
private static SqlSessionFactory sqlSessionFactory;
/**
* 加載位於src/mybatis.xml配置文件
*/
static {
try {
Reader reader = Resources.getResourceAsReader("mybatis.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 禁止外界通過new方法創建
*/
private MybatisUtil() {
}
/**
* 獲取SqlSession
*/
public static SqlSession getSqlSession() {
//從當前線程中獲取SqlSession對象
SqlSession sqlSession = threadLocal.get();
//如果SqlSession對象為空
if (sqlSession == null) {
//在SqlSessionFactory非空的情況下,獲取SqlSession對象
sqlSession = sqlSessionFactory.openSession();
//將SqlSession對象與當前線程綁定在一起
threadLocal.set(sqlSession);
}
//返回SqlSession對象
return sqlSession;
}
/**
* 關閉SqlSession與當前線程分開
*/
public static void closeSqlSession() {
//從當前線程中獲取SqlSession對象
SqlSession sqlSession = threadLocal.get();
//如果SqlSession對象非空
if (sqlSession != null) {
//關閉SqlSession對象
sqlSession.close();
//分開當前線程與SqlSession對象的關系,目的是讓GC盡早回收
threadLocal.remove();
}
}
}
然后,我進行了另一個測試,連接測試
public class TestConnection {
@Test
public void testConnection() throws Exception {
Connection connection = MybatisUtil.getSqlSession().getConnection();
System.out.println(connection!=null?"連接成功":"連接失敗");
}
}
發現是配置文件的錯誤,修改配置文件,連接就成功了,其他的就正確了
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 4 <configuration> 5 6 <properties resource="jdbc.properties"/> 7 8 <!-- 別名標簽 --> 9 <typeAliases> 10 <typeAlias type="com.liuya.demo.mybatis.dysnamic.pojo.NewsLabel" 11 alias="NewsLabel"/> 12 </typeAliases> 13 14 <!-- 配置運行的數據庫環境 --> 15 <environments default="mysqlenvironment"> 16 <environment id="mysqlenvironment"> 17 <!-- 連接池在本地連接中使用,在SSM中不用,用C3P0和DBCP --> 18 <transactionManager type="JDBC"/> 19 <dataSource type="POOLED"> 20 <property name="driver" value="${driver}"/> 21 <property name="url" value="${url}"/> 22 <property name="username" value="${username}"/> 23 <property name="password" value="${password}"/> 24 </dataSource> 25 </environment> 26 </environments> 27 28 <!-- 連接映射文件 --> 29 <mappers> 30 <!-- 最終使用的都是package --> 31 <mapper resource="com\liuya\demo\mybatis\dysnamic\mapper\NewsLabelMapper.xml"/> 32 </mappers> 33 </configuration>
所以要好好的理解Mybatis的框架和配置標簽的使用,這是好使版本的配置
