项目场景:
mybatis xml方式开发
问题描述
org.apache.ibatis.exceptions.PersistenceException:
### Error building SqlSession.
### Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 31; columnNumber: 17; 元素类型为 "configuration" 的内容必须匹配 "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)"。
原因分析:
mybatis主配文件标签顺序错误
修改前的文件
<?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/mb-db.properties"/> <!-- 环境标签,可以写多个environment--> <!-- environments的default对应environment的id,id可以自己起名,default写哪个id,则哪个environment生效--> <typeAliases> <package name="com.geng.entity"/> </typeAliases> <mappers> <package name="com.geng.mapper"/> </mappers> <environments default="env01"> <environment id="env01"> <!-- 事务 JDBC事务是mybatis内置的,支持提交和回滚--> <transactionManager type="JDBC"></transactionManager> <!-- 数据源:驱动串 连接串 账号 密码--> <!-- POLLED表示使用连接池,是mybatis内置的--> <dataSource type="POOLED"> <!-- value从属性文件读取--> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> </configuration>
解决方案:
需要按照properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers
的顺序配置
修改后
<?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/mb-db.properties"/> <!-- 环境标签,可以写多个environment--> <!-- environments的default对应environment的id,id可以自己起名,default写哪个id,则哪个environment生效--> <typeAliases> <package name="com.geng.entity"/> </typeAliases> <environments default="env01"> <environment id="env01"> <!-- 事务 JDBC事务是mybatis内置的,支持提交和回滚--> <transactionManager type="JDBC"></transactionManager> <!-- 数据源:驱动串 连接串 账号 密码--> <!-- POLLED表示使用连接池,是mybatis内置的--> <dataSource type="POOLED"> <!-- value从属性文件读取--> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <package name="com.geng.mapper"/> </mappers> </configuration>