配置文件错误
报错内容:org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容。
原因:在配置文件中没有指定映射文件的位置。
处理:在配置文件中配置映射文件的位置
<mappers>
<mapper resource="映射文件的全路径名"/>
</mappers>
数据无法写到数据库
问题:程序并未报错,但返回插入或者更新删除是返回值正确的(不为零)查询数据库发现数据并未写入进数据库
原因:mybatis除了查询,其他事务需要手动提交
解决:在执行操作之后,调用Sqlsession 的 commit()方法手动提交
字段类型错误(sql语句异常)
异常:Exception in thread “main” org.apache.ibatis.exceptions.PersistenceException:
Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘sanme’ in ‘class com.qianfeng.bean.Story’
原因:字段名拼写错误,找不到对应的字段名
处理:根据报错信息找到对应的错误字段名:Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘sanme’ in ‘class com.qianfeng.bean.Story’,找到并修改成正确字段即可
映射结果集错误
异常:Exception in thread “main” org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2
原因:Mybatis在处理数据库表关系是存在一对一、一对多、多对多的关系,报错原因是混淆一对多和多对多的场景,在只需要一条数据时,查询返回多条数据信息,就会产生报错。
处理:1、更改映射文件中混淆的一对多、多对多的查询查询场景,
2、更改mapper中返回值类型,让多对多查询情况中返回集合,而不是单个的对象。
异常:映射结果集是,映射结构为空,但查到的数据条数是正确的
原因:在子查询时,查询存在一对多或者多对多时,返回的映射结果应当是resultMap类型,并在resultMap设置字段名
处理:1.在映射文件中子查询语句返回值类型应该时resultMap类型
2.映射结果集时,要额外建立一个resultMap,设置字段名获取映射结果