Meat_roast_Engineer
10
2019-04-15 17:57:24 작성 2019-04-16 09:30:13 수정됨
3
82

요소유형 "mapper"의 컨텐츠가 일치해야 한다는 에러를 해결하지 못하고 있습니다.


안녕하십니까. 1달차 초보 개발자입니다.

경험많은 선배 개발자분들의 조언이 필요해 이렇게 글을 씁니다.


현재 발생 중인 에러 구문은

ERROR [org.springframework.web.context.ContextLoader] Context initialization failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'boardDAO': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSession' defined in file [C:\Users\PC-18-06-07-02\eGovFrameDev-3.8.0-64bit\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\BoardTest\WEB-INF\classes\egovframework\spring\context-mapper.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [C:\Users\PC-18-06-07-02\eGovFrameDev-3.8.0-64bit\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\BoardTest\WEB-INF\classes\egovframework\sqlmap\example\mappers\BoardMapper_SQL.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: org.xml.sax.SAXParseException; lineNumber: 96; columnNumber: 10; 요소 유형 "mapper"의 콘텐츠는 "(cache-ref|cache|resultMap*|parameterMap*|sql*|insert*|update*|delete*|select*)+"과(와) 일치해야 합니다.


이며



nested exception is org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: org.xml.sax.SAXParseException; lineNumber: 96; columnNumber: 10; 요소 유형 "mapper"의 콘텐츠는 "(cache-ref|cache|resultMap*|parameterMap*|sql*|insert*|update*|delete*|select*)+"과(와) 일치해야 합니다.

이부분 문제로 인한 에러라고 판단하고 있습니다.


MVC model2  형태로 Egovframewebproject를 사용하여 짜고 있으며

기본 설정은 샘플 프로젝트 내 설정을 기준으로 했습니다.


전자정부에서 권장하는 형태를 기준으로 CRUD 를 구성하는것을 목표로 하다가 제한되어 글을 씁니다.


웹 어플리케이션 동작과 함께 index를 통해 boardList로 이동하도록 설계했습니다.



에러 발생이유로는

1. XML 문 입력이 미흡하여 위와같은 문제가 발생했다고 생각합니다.

제가 사용하고 있는 BoardMapper_SQL.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="egovframework.example.sample.service.impl.BoardMapper">


<typeAlias  alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>

<typeAlias  alias="boardVO" type="egovframework.example.sample.service.BoardDefaultVO"/>


    

        <resultMap id="board" type="egovframework.example.sample.service.BoardVO">

<result property="bno" column="bno"/>

<result property="title" column="title"/>

<result property="content" column="content"/>

<result property="regdate" column="regdate"/>

<result property="updatedate" column="updatedate"/>

</resultMap>




<!-- 파라미터 들을 다 보드VO로 바꿔 보았음. 안되면 searchVO-->

<insert id="insert1">


INSERT INTO tbl_board

  ( bno

  , title

  , writer

  , content)

  

  

VALUES ( <!--seq_board.nextval,이었는데 mysql 에서 nextval 이 안되어서 maria에서 자동생성하도록 변경  -->

#{bno},

#{title},

#{writer},

#{content})


</insert>

<!-- <insert id="insertSelectKey">

<selectKey keyProperty="bno" order="BEFORE" resultType="long">

select seq_board.nextval from dual

</selectKey>

insert into tbl_board 

(bno,

title,

writer,

content)

values 

(#{bno},

#{title},

#{writer},

#{content})

</insert>

  mysql 에서 nextval 이 안되어서 주석처리로 변경  -->


 

<select id="selectBoard" parameterType="egovframework.example.sample.service.BoardDefaultVO" resultType="egovframework.example.sample.service.BoardVO">

select * from tbl_board 

where bno = #{bno}

</select>


<select id="selectBoardList" parameterType="egovframework.example.sample.service.BoardDefaultVO" resultType="egovframework.example.sample.service.BoardVO">

<![CDATA[

select * 

from tbl_board 

where 1=1 

and 10> bno > 0

]]>

</select>


<delete id="delete">

delete tbl_board 

where bno = #{bno}

</delete>

<update id="update">

update tbl_board

set title = #{title},

writer = #{writer},

content = #{content},

updateDate = #{now}

where bno = #{bno}

</update>

<!-- <select id="boardDAO.selectBoardListTotCnt" parameterType="boardVO" resultType="int">


SELECT COUNT(*) totcnt

FROM SAMPLE

WHERE 1=1

<isEqual prepend="AND" property="searchCondition" compareValue="0">

ID LIKE '%' || #searchKeyword# || '%'

</isEqual>

<isEqual prepend="AND" property="searchCondition" compareValue="1">

NAME LIKE '%' || #searchKeyword# || '%'

</isEqual>  isEqual을 정의해주라는 에럭가 떠서 지워줌

</select> -->

</mapper>



2번째 원인으로는 Mybatis 사용 미숙으로 인한 세팅 오류일것으로 판단됩니다.


이를위해

context-mapper.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"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">


<!-- SqlSession setup for MyBatis Database Layer -->

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="dataSource" />

<property name="configLocation" value="classpath:/egovframework/sqlmap/example/sql-mapper-config.xml" />

<property name="mapperLocations" value="classpath:/egovframework/sqlmap/example/mappers/*.xml" />

</bean>


<!-- MapperConfigurer setup for MyBatis Database Layer with @Mapper("deptMapper") in DeptMapper Interface -->

  <bean class="egovframework.rte.psl.dataaccess.mapper.MapperConfigurer">

<property name="basePackage" value="egovframework.example.sample.service.impl" />

</bean>

    

</beans>




BoardDAO.java



package egovframework.example.sample.service.impl;


import java.util.List;


import org.springframework.stereotype.Repository;


import egovframework.example.sample.service.BoardDefaultVO;

import egovframework.example.sample.service.BoardVO;


import egovframework.rte.psl.dataaccess.EgovAbstractMapper;


@Repository("boardDAO")

public class BoardDAO extends EgovAbstractMapper {


public int insert(BoardVO vo) throws Exception {


return insert("boardDAO.insert",vo);

}

public void update(BoardVO vo) throws Exception {


update("boardDAO.update",vo);

}


public BoardVO selectBoard(BoardVO vo) throws Exception {

return (BoardVO) selectList("boardDAO.selectBoard",vo);

//

}



public void delete(BoardVO vo){


delete("boardDAO.delete", vo);

}

// public List<BoardVO> getList() {

//

// log.info("getList..........");

//

// return mapper.getList();

// }

public List<?> selectBoardList(BoardDefaultVO searchVO)throws Exception {


return list("searchVO", searchVO);

}


/* public int selectBoardListTotCnt(BoardDefaultVO searchVO) {

return (Integer) selectMap("boardDAO.selectboardListTotCnt", searchVO);


}*/

}


BoardVO


package egovframework.example.sample.service;


import java.util.Date;




public class BoardVO {


  private int bno;

  private String title;

  private String content;

  private String writer;

  private Date regdate;

  private Date updatedate;

  

public int getBno() {

return bno;

}

public void setBno(int bno) {

this.bno = bno;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public String getContent() {

return content;

}

public void setContent(String content) {

this.content = content;

}

public String getWriter() {

return writer;

}

public void setWriter(String writer) {

this.writer = writer;

}

public Date getRegdate() {

return regdate;

}

public void setRegdate(Date regdate) {

this.regdate = regdate;

}

public Date getUpdatedate() {

return updatedate;

}

public void setUpdatedate(Date updatedate) {

this.updatedate = updatedate;

}

public BoardVO(int bno, String title, String content, String writer, Date regdate, Date updateDate, Date updatedate) {

super();

this.bno = bno;

this.title = title;

this.content = content;

this.writer = writer;

this.regdate = regdate;

this.updatedate = updatedate;

}

@Override

public String toString() {

return "BoardVO [bno=" + bno + ", title=" + title + ", content=" + content + ", writer=" + writer + ", regdate="

+ regdate + ", updatedate=" + updatedate + "]";

}

  

  

}

context-datasource.xml 일부



 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/soonwan" />
        <property name="username" value="root"/>
        <property name="password" value="1234"/>
    </bean>



sql-map-config.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
<sqlMap resource="egovframework/sqlmap/example/mappers/BoardMapper_SQL.xml"/>
</sqlMapConfig>


sql-mapper-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>
    <typeAliases>
<typeAlias alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>
<typeAlias alias="searchVO" type="egovframework.example.sample.service.BoardDefaultVO"/>
<typeAlias alias="boardVO" type="egovframework.example.sample.service.BoardVO"/>
    </typeAliases>
</configuration>



입니다.


모쪼록 부족한 후배에게 가르침 부탁드립니다.
0
0
  • 답변 3

  • 유리세계
    884
    2019-04-15 19:50:56

    </resultMap>





    INSERT INTO tbl_board

      ( bno

      , title

      , writer

      , content)

      

    VALUES (

    #{bno},

    #{title},

    #{writer},

    #{content})


    </insert>


    ---------------------------------------------------------------------

    xml 처음부터 뭔가 이상한데요

    mapper, id로 시작안하고 /resutMap?...

    0
  • Meat_roast_Engineer
    10
    2019-04-16 09:28:36

    그대로 이클립스에서 복사해서 가지고 온건데 이상하네요...


    중간에 잘려서 들어갔습니다.


    <resultMap id="board" type="egovframework.example.sample.service.BoardVO">

    <result property="bno" column="bno"/>

    <result property="title" column="title"/>

    <result property="content" column="content"/>

    <result property="regdate" column="regdate"/>

    <result property="updatedate" column="updatedate"/>

    </resultMap>




    <!-- 파라미터 들을 다 보드VO로 바꿔 보았음. 안되면 searchVO-->

    <insert id="insert">


    INSERT INTO tbl_board

      ( bno

      ,title

      , writer

      , content)

      


    잘린부분의 원문은 위와 같습니다.


    본문도 수정하겠습니다 ㅎㅎ

    0
  • Meat_roast_Engineer
    10
    2019-04-16 09:33:08


    위 사진 처럼 분명히 기입이 되어있는데 게시물 등록시 저장이 되지 않네요.


    뭔가 제가 잘못 기입한건가요..?

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.