Verdagon
Verdagon

Reputation: 2630

mybatis mapper xml: The content of element type "mapper" must match

I'm having a hard time getting my simple mybatis file to work. I have this file:

<?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="truthtree.model.mysql.UserMapper">

    <typeAlias alias="User" type="truthtree.model.mysql.User" />

    <select id="getAllUsers" resultType="User">
        select * from User
    </select>

    <select id="findUserByID" resultType="User">
        select *
        from User
        where id=#{id,javaType=int}
    </select>

    <select id="findByNameAndPassword" resultType="User">
        select *
        from User
        where name = #{name,javaType=String}
          and password = #{password,javaType=String}
    </select>

</mapper>

I get the following exception:

Caused by: org.xml.sax.SAXParseException: The content of element type "mapper" must match "(cache-ref|cache|resultMap*|parameterMap*|sql*|insert*|update*|delete*|select*)+".

Which is confusing because I definitely have some s in there. Any ideas what could be wrong here? Thanks!

Upvotes: 1

Views: 14733

Answers (1)

jalopaba
jalopaba

Reputation: 8129

What you have wrong here is that the typeAlias element does not go into the mapper file. It's not present in the mybatis-3-mapper.dtd. The typeAlias element has to be included in the mybatis-config file (inside the typeAliases element, as it is clear in the mybatis-3-config.dtd:

<!ELEMENT typeAliases (typeAlias*,package*)>

<!ELEMENT typeAlias EMPTY>
<!ATTLIST typeAlias
type CDATA #REQUIRED
alias CDATA #IMPLIED
>

Upvotes: 3

Related Questions