构建SqlSession

时间:2016-10-18 06:12:59

标签: mybatis

我正在学习如何使用Mybatis,而我正在使用tutorialpoint.com上的教程。 [教程链接] [1]但我收到以下错误

这是我的配置文件

    <configuration>

       <environments default = "development">
          <environment id = "development">
             <transactionManager type = "JDBC"/> 

             <dataSource type = "POOLED">
                <property name = "driver" value = "com.mysql.jdbc.Driver"/>
                <property name = "url" value =     "jdbc:mysql://localhost:3306/details"/>
                <property name = "username" value = "root"/>
                <property name = "password" value = "f8802700@"/>
             </dataSource>   

          </environment>
       </environments>

   <mappers>
      <mapper resource = "MyBatisPractice/Student.xml"/>
   </mappers>

</configuration>

这是我的映射文件

<?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 = "Student">

   <insert id = "insert" parameterType = "Student">
      INSERT INTO STUDENT (NAME, BRANCH, PERCENTAGE, PHONE, EMAIL ) VALUES (#{name}, #{branch}, #{percentage}, #{phone}, #{email});

       <selectKey keyProperty = "id" resultType = "int" order = "AFTER">
          select last_insert_id() as id
      </selectKey>   

   </insert>

</mapper>

我完全遵循了教程所显示的内容,但是我得到了错误并构建了SqlSession。错误消息的第一部分

  

线程“main”中的异常   org.apache.ibatis.exceptions.PersistenceException:

     

构建SqlSession时出错。

     

SQL Mapper配置

中可能存在错误      

原因:org.apache.ibatis.builder.BuilderException:创建文档实例时出错。原因:org.xml.sax.SAXParseException; LINENUMBER:

     

1; columnNumber:16;文档根元素“配置”必须匹配   DOCTYPE根“null”。在   org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8)     在   org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:32)     在   org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:15)     在MybatisInsert.main(MybatisInsert.java:18)at   sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:498)at   com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)   引起:org.apache.ibatis.builder.BuilderException:创建错误   文件实例。原因:org.xml.sax.SAXParseException;电话号码:   1; columnNumber:16;文档根元素“配置”必须匹配   DOCTYPE根“null”。在   org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:212)     在org.apache.ibatis.parsing.XPathParser。(XPathParser.java:81)     在   org.apache.ibatis.builder.xml.XMLConfigBuilder。(XMLConfigBuilder.java:47)     在   org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:28)     ... 7更多引起:org.xml.sax.SAXParseException; lineNumber:1;   columnNumber:16;文档根元素“配置”必须匹配   DOCTYPE根“null”。在   com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)     在   com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134)     在   com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:396)     在   com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)     在   com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:284)     在   com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.rootElementSpecified(XMLDTDValidator.java:1599)     在   com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1877)     在   com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:742)     在   com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1358)     在   com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl $ ContentDriver.scanRootElementHook(XMLDocumentScannerImpl.java:1295)     在   com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3129)     在   com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl $ PrologDriver.next(XMLDocumentScannerImpl.java:880)     在   com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)     在   com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:504)     在   com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)     在   com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)     在   com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)     在   com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)     在   com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)     在   org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:210)     ......还有10个

有任何建议可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

我解决了这个问题。本教程的配置文件缺少DTD验证检查。它在我添加验证检查后起作用。

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Confi 3.0//EN" "http://www.mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

   <environments default = "development">
      <environment id = "development">
         <transactionManager type = "JDBC"/> 

         <dataSource type = "POOLED">
            <property name = "driver" value = "com.mysql.jdbc.Driver"/>
            <property name = "url" value = "jdbc:mysql://localhost:3306/details"/>
            <property name = "username" value = "root"/>
            <property name = "password" value = "f8802700@"/>
         </dataSource>   

      </environment>
   </environments>

   <mappers>
      <mapper resource = "Student.xml"/>
   </mappers>

</configuration>