[问题记录] :MyBatis 报错:元素类型为 "configuration" 的内容必须匹配 "(properties?,settings?,typeAliases?,typeHandlers?

如题:

服务器启动的时候报如下问题,详细错误日志如下:

Caused by: org.xml.sax.SAXParseException; lineNumber: 20; columnNumber: 17; 元素类型为 "configuration" 的内容必须匹配 
 (properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)"。
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)

解决方案:

  • 检查”configuration” 根元素下配置的属性是否与DTD文件中定义的一致.
  • 检查各个子节点的顺序是否与DTD中定义的元素:configuration的子节点顺序一致.

什么是DTD?

与XML Schema 一样 ,XML DTD 用来定义XML文档的合法构成.

DTD的使用

## 引入DTD文件 ##

提供2种引入方式: 远程引用 与 本地引用
远程引用


例子(mybatis-config.xml): 

本地引用

   
  例子(mybatis-config.xml)
  

认识DTD

以mybatis-3-config.dtd为例:



#REQUIRED>
...

定义元素
- 定义 有子元素 的元素:


例:


表示: 定义元素 configuration 包含子元素 properties ,settings ...

此处子元素的顺序决定了xml文件中声明元素的顺序,否则会出现文章开始时候的错误.

其中 "?" 正则表达表示 该子元素可以在父元素下出现的次数. 类似使用如下:
? : 0次或1次
+ : >= 一次
* : 任意次
无上述符号 : 1次
  • 定义 无子元素 的元素
EMPTY>
例:
property EMPTY>
表示:定义元素property,没有子元素. 
  • 定义包括任意元素且子元素无顺序限制的元素
<!ELEMENT 元素名称 ANY>
  • 定义常量
<!ENTITY 元素名称 "元素内容">
例:
<!ENTITY title "问题解析>
表示定义了一个为"title"的常量. 在 xml文件中按照以下方式读取
<article>&title;article>
  • 定义元素属性

1名 值类型 属性限定
属性2名 值类型 属性限定
属性3名 值类型 属性限定>
例:
typeAlias EMPTY>
typeAlias
type CDATA #REQUIRED
alias CDATA #IMPLIED
>
元素 typeAlias的属性列表:
属性:type 字符串类型 必填项
属性:alias 字符串类型 选填项
  • 常用属性的值类型
值类型 描述
CDATA 字符串类型
ID 唯一标识,在XML中只能出现一个,不能重复
(值1|值2|值3) 枚举

- 常用属性限定字符

限定字符 描述
REQUIRED 必填属性
IMPLIED 可选属性
FIXED 固定值
字符串 默认值

例: ( gender (男|女) "男">)

你可能感兴趣的:(问题记录)