2016-12-06 24 views
0

Ich versuche, eine Verbindung zu DB2 über mybatis herzustellen. Mein Problem ist, dass mybatis-config meine Klassendatei für den von mir verwendeten Datentyp nicht finden kann.ClassNotFound während der Verwendung von myBatis config

ClientMapper.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 namespace='Client'> 
    <select id='getNumber' parameterType='String' 
     resultType='org.TE1.Client'> 
     SELECT 
     number AS phone 
     FROM client 
     WHERE name = #{name} 
    </select> 
</mapper> 

ClientMapperInterface.java

package org.TE1.Mapper; 

public interface ClientMapperInterface { 
    public String getNumber(String name); 
} 

Client.java

package org.TE1.Client; 

public class Client { 
    private int id; 
    private String name; 
    private String phone; 

    //some getters and setters 
} 

Mybatis-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> 
    <properties resource='jdbc.properties' /> 
    <typeAliases> 
     <typeAlias type='org.TE1.Client' alias='Client'></typeAlias> 
    </typeAliases> 
    <environments default='development'> 
     <environment id='development'> 
      <transactionManager type='JDBC' /> 
      <dataSource type='POOLED'> 
       <property name='driver' value='com.ibm.db2.jcc.DB2Driver' /> 
       <property name='url' value='jdbc:as400://localhost:50000/dir' /> 
       <property name='username' value='root' /> 
       <property name='password' value='admin' /> 
      </dataSource> 
     </environment> 
    </environments> 
    <mappers> 
     <mapper resource='org/TE1/Mapper/ClientMapper.xml' /> 
    </mappers> 
</configuration> 

Tester Java-Datei.

public class testGetPhone { 
    public static void main(String[] args) { 
     Reader reader = null; 
     try { 
      reader = Resources.getResourceAsReader("mybatis-config.xml"); 
     } catch (IOException e) { 
      System.out.println("MyBatis config not found!"); 
      e.printStackTrace(); 
     } 
     SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); 
     SqlSession session = sqlSessionFactory.openSession(); 

     int number = session.selectOne("Client.getNumber", "TEST"); 
     System.out.println("number:" + number); 
     session.commit(); 
     session.close(); 
    } 
} 

Zuerst dachte ich, es könnte etwas mit, wie die Config sucht nach der Klassendatei, aber nach einiger Bastelei bin ich ziemlich sicher, dass es die Klassendatei nicht gefunden, aber denke, dass es nicht die richtige Klassendatei (nicht sicher, aber es). Irgendeine Hilfe?

Antwort

0

ok so geändert i

<typeAlias type='org.TE1.Client' alias='Client'></typeAlias> 

zu

<typeAlias type='org.TE1.Client.Client' alias='Client'></typeAlias> 

und das schien den Trick zu tun. vielleicht hat es wirklich versagt, nach der Klassendatei zu suchen.

+1

Tatsächlich muss der Namespace der (vollständige qualifizierte) Klassenname und nicht nur der Paketname sein. Übrigens ist es eine bewährte Methode, Pakete mit Kleinbuchstaben zu benennen, und die Tatsache, dass das letzte Segment des Paketpfads den gleichen Namen wie die Klasse hat, könnte die ursprüngliche Verwirrung verursacht haben. – blackwizard

Verwandte Themen