学习mybatis框架中遇到:org.apache.ibatis.exceptions.PersistenceException: 解决方法


org.apache.ibatis.exceptions.PersistenceException: 
### Error building SqlSession.
### The error may exist in User.xml
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.NullPointerException
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:26)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:82)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:66)
at com.qf.test.Demo01.test01(Demo01.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.NullPointerException
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:109)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:92)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80)
... 25 more
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.NullPointerException
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:120)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:92)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.mapperElement(XMLConfigBuilder.java:322)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:107)
... 27 more
Caused by: java.lang.NullPointerException
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:109)
... 30 more

解决方法一:

查看User.xml y映射文件mapper中是否定义了命名空间  namespace="test”,如果没有加上namespace="test”就可以



<?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="test">
     
     <!-- 根据id查询用户,UesrById(int id)
     select:配置查询语句
     id:可以通过id找到执行的statement,(ststement是唯一标识)
     praramentType:输入参数的类型
     resultType:输出结果类型
      -->
      
      <select id="findById" parameterType="int" resultType="com.qf.domain.User">
         select * from user where id=#{id}
         
   </select>      
</mapper>




解决方法二:(原文地址:http://blog.csdn.NET/lkwan123/article/details/59043923)

  1. org.apache.ibatis.exceptions.PersistenceException:   
  2. ### Error building SqlSession.  
  3. ### The error may exist in cn.itcast.mybatis.mapper/UserMapper.xml  
  4. ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource cn.itcast.mybatis.mapper/UserMapper.xml  
  5.     出现这个问题大多数都是找不到映射文件,这和没有遵循mybatis的mapper代理配置规范有关,对于我这个问题仔细看java.io.IOException:Could not find resource   
  6. cn.itcast.mybatis.mapper/UserMapper.xml,就是文件读写出现问题,系统找不到这个文件,需要检查,mapper接口与映射的mapper.xml 的命名是否一致,是否在同一目录下。  
  7. 如果还没解决就在看SqlMapConfig.xml配置文件加载mapper接口文件的路径有没有错误,一般有两种方试,第一扫描类<mapper class=:"类路径和类名"/>第二种批量扫描加载:选择扫描包<package name="包名"/>经过不懈努力问题终于解决。

  8. 开发mybatis时要注意四点开发规范:  
  9. 1、在mapper.xml中namespace等于mapper接口地址  
  10. 2、mapper.java接口中的方法名和mapper.xml中statement的id一致  
  11.    
  12. 3、mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致。  
  13.    
  14. 4、mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值