2017-08-02 14 views
4

これは直前に質問した人です。私はSpring BeanCreationExceptionエラーに関するアドバイスを受けたいと思います。エラー

質問のエラーは成功しましたが、別のエラーが発生しました。春の初心者として

は、私にはわからないと

私が尋ねる多くの質問を持っている多くのものがあります。ご理解ください。

エラーコード。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private dao.IMemberDAO service.MemberService.memberDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [dao.IMemberDAO] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
Related cause: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberDao' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'sqlSessionFactory' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [C:\Users\admin\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\rachelivf\WEB-INF\classes\dao\mapper\memberDaoMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'member'. Cause: java.lang.ClassNotFoundException: Cannot find class: member 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1210) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) 

以下は、MemberService.javaコードです。

package service; 

import java.util.HashMap; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Repository; 
import org.springframework.stereotype.Service; 


import dao.IMemberDAO; 
import model.Member; 

@Service 
public class MemberService 
{ 
    @Autowired 
    private IMemberDAO memberDao; 

    public void joinMember(HashMap<String, Object> params) 
    { 
     if(params.get("pw").equals(params.get("pwd_CHECK"))) 
     { 
      memberDao.insertMember(params); 
     } 
    } 
} 

ここにapplicationContext.xmlコードがあります。私の知る限りでは

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:jdbc="http://www.springframework.org/schema/jdbc" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> 

    <context:component-scan base-package="service" /> 

    <bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource"> 
     <property value="com.mysql.jdbc.Driver" name="driverClassName"></property> 
     <property value="jdbc:mysql://localhost/rachelvf" name="url"></property> 
     <property value="root" name="username"/> 
     <property value="mysql" name="password"/> 
    </bean> 

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource"></property> 
     <property name="mapperLocations" value="classpath*:dao/mapper/*.xml"></property> 
    </bean> 

    <bean id="memberDao" class="org.mybatis.spring.mapper.MapperFactoryBean"> 
     <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> 
     <property name="mapperInterface" value="dao.IMemberDAO"></property> 
    </bean> 

</beans> 

これは私が注釈サービスを挿入しませんでした

ので、上記のエラーが発生する理由です。

もちろん、私はサービスアノテーションを挿入しましたが、エラーが発生します。

私に助言してください。

memberDaoMapperコードです。

<?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="dao.IMemberDAO"> 
    <insert id="insertMember" parameterType="java.util.HashMap"> 
     insert into member values 
     (
      #{id},#{pw},default  
     ) 
    </insert> 

    <update id="updateMember" parameterType="java.util.HashMap"> 
     update member set id = #{id}, pw = #{pw}, authority = #{authority} 
    </update> 

    <delete id="deleteMember" parameterType="String"> 
     delete from member where id = #{id} 
    </delete> 

    <select id="selectOne" parameterType="String" resultType="member"> 
     select * from member where id = #{id} 
    </select> 

    <select id="selectAll" parameterType="String" resultType="member"> 
     select * from member 
    </select> 
</mapper> 

IMemberDao.javaコードです。

package dao; 

import java.util.HashMap; 

import java.util.List; 

import org.mybatis.spring.annotation.MapperScan; 

import model.Member; 

public interface IMemberDAO 
{ 
    public int insertMember(HashMap<String, Object> params); 

    public int updateMember(HashMap<String, Object> params); 

    public int deleteMember(String id); 

    public HashMap<String, Object> selectOne(String id); 

    public List<HashMap<String, Object>> selectAll(); 
} 

タイプミスを完全にチェックしましたが、見つからないタイプミスはありませんでした。

問題が何ですか?私はそれらのいずれかにエラーがあると仮定し、おそらくあなたがXMLでmemberを書いて、マッパーファイルがない

org.apache.ibatis.type.TypeException: Could not resolve type alias 'member' 

+1

私は慎重にmemberDaoMapperをチェックしますが、そこにはタイプミスではありませんし、私は問題が何であるかを知りません。質問にmemberDaoMapperの部分を投稿します。それを確認できますか? –

+1

さらに詳しい情報は常に有用です – araknoid

+1

提供されている追加の情報に正確に答えを更新しました。 – araknoid

答えて

1

スタックトレースのこの部分は、あなたの問題の適切なヒントを与える必要があります完全修飾クラス名を必要とする属性。

私の提案は、これらのファイルにmemberを検索することで、あなたは追加のマッピングファイルを見てみると、誤ったフィールド(ほとんどのようなparameterTypeまたはresultType

でそれを見つける必要があり、あなたはresultType="member"を持っています。上記のように、resultTypeには完全修飾クラス名が必要です。あなたの問題への解決策 はほとんどが2以下のとおりです。

  1. <select id="selectOne" parameterType="String" resultType="model.Member"> 
        select * from member where id = #{id} 
    </select> 
    
    <select id="selectAll" parameterType="String" resultType="model.Member"> 
        select * from member 
    </select> 
    
  2. 実際のクラスにresultTypeがsampleVOクラスの型エイリアスタグを追加修正します。

    <mapper namespace="model.Member"> 
        <typeAlias alias="member" type="model.Member" /> 
        ... 
    </mapper> 
    
+1

DAO部分でselectAllにパラメータを指定しませんでしたが、マッパーがselectAllにパラメータ型を指定したため、エラーが発生しました。私はあなたの助言のために問題を解決しました。それはとてもうまくいっています!しかし、1つの質問があります。マッパとダオが1対1で一致する必要がありますか? –

+0

本当にあなたのプロジェクトをどのように構造化したいのかに依存しますが、DAOのそれぞれのファイルを別々のファイルに入れておくと、プロジェクトが成長した場合にメンテナンス性に役立ちます。 – araknoid

+1

私は新しい情報を知っています、ありがとう。しかし、私が知りたいのは、マッパーで指定されたparameterTypeとDaoで指定されたparameterTypeが同じでなければならないということです。 –

関連する問題