首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更改Gradle项目文件夹结构时线程“主”java.lang.ExceptionInInitializerError中的异常

更改Gradle项目文件夹结构时线程“主”java.lang.ExceptionInInitializerError中的异常
EN

Stack Overflow用户
提问于 2017-03-08 08:47:59
回答 1查看 1.6K关注 0票数 0
代码语言:javascript
运行
复制
Exception in thread "main" java.lang.ExceptionInInitializerError
    at com.myBatis.Dao.VillageDAO.save(VillageDAO.java:14)
    at com.myBatis.service.RunMybatis.main(RunMybatis.java:17)
Caused by: org.apache.ibatis.exceptions.PersistenceException: 
### Error building SqlSession.
### The error may exist in SQL Mapper Configuration
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error registering typeAlias for 'village'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.myBatis.mapper.Village
    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:26)
    at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:82)
    at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:66)
    at com.myBatis.service.MyBatisUtil.<clinit>(MyBatisUtil.java:23)
    ... 2 more
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error registering typeAlias for 'village'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.myBatis.mapper.Village
    at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:109)
    at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:92)
    at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80)
    ... 4 more
Caused by: org.apache.ibatis.builder.BuilderException: Error registering typeAlias for 'village'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.myBatis.mapper.Village
    at org.apache.ibatis.builder.xml.XMLConfigBuilder.typeAliasesElement(XMLConfigBuilder.java:130)
    at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:99)
    ... 6 more
Caused by: java.lang.ClassNotFoundException: Cannot find class: com.myBatis.mapper.Village
    at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:190)
    at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:89)
    at org.apache.ibatis.io.Resources.classForName(Resources.java:256)
    at org.apache.ibatis.builder.xml.XMLConfigBuilder.typeAliasesElement(XMLConfigBuilder.java:123)
    ... 7 more

我尝试使用myBatis configuration.When在Gradle项目中执行一个简单的CRUD操作--我在src/ java /main上使用了所有的java文件,只有一个包--这一切都很好。但是,当我试图在同一个src/main/java中使用多个包拆分文件时,它会抛出java.lang.ClassNotFoundException异常。帮帮我伙计们。

VillageMapper.xml

代码语言:javascript
运行
复制
<?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.myBatis.mapper.VillageMapper" >
    <resultMap id="villageResult" type="village">
        <id property="id" column="id" />
        <result property="name" column="name"/>
        <result property="district" column="district"/>
    </resultMap>
    <select id="selectVillage" resultType="village" parameterType="int" resultMap="villageResult">
        SELECT id, name, district from village WHERE id = #{id}
    </select>
    <insert id="insertVillage" parameterType="village"  keyProperty="id" useGeneratedKeys="true">
        INSERT into village(name,district) VALUES(#{name}, #{district})         
    </insert>
    <update id="updateVillage" parameterType="village">
        UPDATE village SET name=#{name}, district =#{district} WHERE id =#{id}          
    </update>
    <delete id="deleteVillage" parameterType="int">
        DELETE FROM village WHERE id =#{id}         
    </delete>
</mapper>

mybatis-config.xml

代码语言:javascript
运行
复制
<?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>
  <typeAliases>
     <typeAlias type="com.myBatis.mapper.Village" alias="village"/>
  </typeAliases>  
  <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://192.168.11.122:3306/srikanth_k"/>
        <property name="username" value="srikanth_k"/>
        <property name="password" value="demo"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/myBatis/mapper/VillageMapper.xml" />
  </mappers>
</configuration> 

MyBatisUtil.java

代码语言:javascript
运行
复制
package com.myBatis.service;

import java.io.IOException;
import java.io.InputStream;

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

public class MyBatisUtil {

    private static SqlSessionFactory sqlSessionFactory;

    static {

        String resource = "mybatis-config.xml";

        InputStream inputStream;

        try {

            inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        } catch (IOException e) {

            e.printStackTrace();
        }
    }

    public static SqlSessionFactory getSqlSessionFactory() {

        return sqlSessionFactory;
    }
}

build.gradle

代码语言:javascript
运行
复制
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'war'
archivesBaseName = 'myBatis'
version = '1' 
repositories {
    mavenCentral()
}
dependencies {
    compile 'org.mybatis:mybatis:3.2.8'
    compile 'mysql:mysql-connector-java:5.1.34'
} 

我的项目dir多包版本

代码语言:javascript
运行
复制
myBatis
    -src/main/java
        -com.myBatis.api
            -Village.java
        -com.myBatis.Dao
            -VillageDao.java
        -com.myBatis.service
            -MyBatisUtil.java
            -RunMyBatis.java
    -src/main/resources
        -com.myBatis.mapper
            -VillageMapper.xml
        -mybatis-config.xml

我的项目dir单包版本

代码语言:javascript
运行
复制
    myBatis
        -src/main/java
            -com.myBatis.api
                -Village.java
                -VillageDao.java
                -MyBatisUtil.java
                -RunMyBatis.java
        -src/main/resources
                -com.myBatis.mapper
                    -VillageMapper.xml
                -mybatis-config.xml
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-08 11:46:36

问题出在mybatis-config.xml

代码语言:javascript
运行
复制
<typeAlias type="com.myBatis.mapper.Village" alias="village"/>

相反,

代码语言:javascript
运行
复制
<typeAlias type="com.myBatis.api.Village" alias="village"/>

我指的是VillageDAO.java的所有CRUD方法中的Village.java,而应该将其映射到VillageMapper.xml.

VillageDAO.java

代码语言:javascript
运行
复制
package com.myBatis.Dao;


import org.apache.ibatis.session.SqlSession;

import com.myBatis.api.Village;
import com.myBatis.service.MyBatisUtil;


public class VillageDAO {

    public void save(Village village) {

        SqlSession session  = MyBatisUtil.getSqlSessionFactory().openSession();
        session.insert("com.myBatis.mapper.VillageMapper.insertVillage", village);
        session.commit();
        session.close();
    }

    public void update(Village village) {

        SqlSession session  = MyBatisUtil.getSqlSessionFactory().openSession();
        session.update("com.myBatis.mapper.VillageMapper.updateVillage", village);
        session.commit();
        session.close();
    }

    public void delete(Integer id) {

        SqlSession session  = MyBatisUtil.getSqlSessionFactory().openSession();
        session.delete("com.myBatis.mapper.VillageMapper.deleteVillage", id);
        session.commit();
        session.close();
    }

    public Village getData(Integer id) {

        SqlSession session  = MyBatisUtil.getSqlSessionFactory().openSession();
        Village village     = session.selectOne("com.myBatis.mapper.VillageMapper.selectVillage", id);
        session.close();
        return village;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42666726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档