我们在使用Maven创建一个Mybatis项目的时候,难免会遇到一些坑,这些坑是新手经常遇到且不容易理解的,这里对这些问题作一个简单的介绍以及对应的解决办法
1.未设置静态资源过滤导致的报错

Error building SqlSession.
The error may exist in com/bjut/dao/UserMapper.xml
Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/bjut/dao/UserMapper.xml

引起上述问题的主要原因是:在src或其子文件夹下写的配置文件却无法被导出到target, 导致程序发生错误无法执行

针对这种情况,我们的解决办法是在pom.xml中设置静态资源过滤相关配置

<!--在build中配置resources,来防止我们资源导出失败的问题--><build><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build>


2. 1 字节的 UTF-8 序列的字节 1 无效的

Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 1 字节的 UTF-8 序列的字节 1 无效。

导致这个错误主要的原因是xml中设置的encoding导致的

<?xml version="1.0" encoding="UTF-8" ?>

解决上述问题的方法就是将xml配置中的UTF-8修改为UTF8即可

在数据库相关配置文件也经常出现两个坑:

  • 未配置URL的时区导致的错误
Error querying database.  Cause: java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specific time zone value if you want to utilize time zone support.

针对上述问题,我们秩序在jdbc的配置文件中将url相关配置添加时区设置即可

url=jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&characterEncoding=UTF-8
改为:
url=jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&characterEncoding=UTF-8&serverTimezone=UTC
  • 使用原版的Driver导致的警告
    有时我们还会遇到以下的警告,该警告也是jdbc配置文件中驱动配置导致的
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

针对上述问题,我们通过修改jdbc的driver为最新的驱动格式即可:

driver=com.mysql.jdbc.Driver
改为:
driver=com.mysql.cj.jdbc.Driver

3.未在核心配置文件中注册mapper导致的错误

org.apache.ibatis.binding.BindingException: Type interface com.bjut.dao.UserMapper is not known to the MapperRegistry.

上述错误的产生原因是没有在mybatis-config.xml中配置mapper,在mybatis-config.xml中注册mapper即可

<mappers><mapper resource="com/bjut/dao/UserMapper.xml"/>
</mappers>

4.配置文件中mappper路径配置导致的错误

Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com.bjut.dao.UserMapper.xml

上述错误的原因是,mapper中使用resource配置mapper路径是需要使用的是’/‘隔开不是’.‘隔开。改正的方法是将resource中路径格式修改即可

<mappers><mapper resource="com.bjut.dao.UserMapper.xml"/>
</mappers><!--修改为以下即可 -->
<mappers><mapper resource="com/bjut/dao/UserMapper.xml"/>
</mappers>

5.关于mapper配置中mapper加载的三种方式的说明补充

  • resource加载方式

​ resource加载方式适用于接口文件与mapper.xml文件不在同一路径下的情况,仅能使用resource来加载映射文件

<mappers><mapper resource="com/bjut/dao/UserMapper.xml"/>
</mappers>

  • class加载方式

​ class加载方式适用于接口文件与mapper.xml文件在同一路径下且接口名与映射文件名相同的情况,并且映射文件命名为接口全类名的情况

<mappers>//class的内容是接口的全类名<mapper class="com.bjut.dao.UserMapper"/>
</mappers>

  • package加载方式

package加载方式适用于接口文件与mapper.xml文件在同一路径下,且接口名与映射文件名相同的情况,并且映射文件命名为接口全类名的情况

<mappers>//package的内容是接口所在包的全路径,且package会自动映射该包下所有的接口与对应的mapper.xml<package name="com.bjut.dao"/>
</mappers>


注意:

  • 全类名:com.bjut.dao.* 类路径:com/bjut/dao/*

  • resource方式中使用的是路径名,且是*.xml的路径;class和package中使用的是接口或者包的全类名,注意区别

Mybatis配置Mapper踩过的坑相关推荐

  1. 关于Redis配置主从复制踩到的坑,主机不显示从机的连接信息

    关于Redis配置主从复制踩到的坑!!! 设置单机集群的时候,两台从机都显示连接到主机,但是主机显示连接到的从机数量为0: 主机信息: 从机80: 从机81: 查看从机log日志文件发现错误信息: M ...

  2. Mybatis配置mapper.xml的三种方式

    1.使用package 配置XXXMapper.xml所在的包 <mappers><package name="com.sun.dao"/></map ...

  3. Unity2020打包安卓时配置环境踩过的坑(JDKSDKNDKGradle详解)

    之前的打包环境都是吃现成的, 这次新公司需要自己配置,踩了坑记录一下,以防之后遗忘. 如果是 用Hub管理的项目 可以通过Hub 去下载 安装内置的Open JDK ,SDK 等很方便也稳定. 没有用 ...

  4. 记录android老项目studio升级3.1+后重新配置gradle踩过的坑

    2019独角兽企业重金招聘Python工程师标准>>> // def releaseApkName = 'KGRingeToneV' + defaultConfig.versionN ...

  5. [转载][AutoCAD二次开发][2017]Autocad2017 ObjectARX 开发 环境配置和踩到的坑

    转自 https://www.cnblogs.com/aweffr/p/7510544.html 其中 链接器(Linker)中添加附加依赖目录和附加依赖项 版本号记得改成自己的版本就好 碎碎念 不得 ...

  6. [AutoCAD二次开发][2017]Autocad2017 ObjectARX 开发 环境配置和踩到的坑

    碎碎念 不得不说autocad二次开发的相关资料真的少,大多数还很旧.图书馆里VBA的一本最近出版时间是2006,AutoLisp的2013(还是个十二五规划教材),ObjectARX的书是2014年 ...

  7. Mybatis配置 mapper

    四种方式: 一.用classPath下资源引用 (推荐使用,类文件和mapper文件可以不需要 放在一个文件夹中,xml文件也不会和java文件混合在一起) <mappers>       ...

  8. Linux+Nginx+PHP 宝塔配置GetwayWorker 踩过的坑

    1.下载GetwayWorker包:下载workerman及相关应用 把解压好的文件放在服务器上(本人放在了项目里) 2.开始之前请先仔细看GetwayWorker手册:序言 · GatewayWor ...

  9. 关于idea+mybatis+springcloud+swagger2+Apollo 踩得小坑

    关于idea+mybatis+springcloud+swagger2 踩得小坑 在使用动态sql 联用order by 和 limit的时候 可以使用来进行语句的动态拼接 例如插入可选的四个参数 o ...

最新文章

  1. 电脑怎么分屏2个显示器_程序员一台电脑装2个显示屏?因为专业
  2. C++实现各种排序算法
  3. centos 开发php扩展,【PHP扩展】centos给PHP安装扩展
  4. python字符串_教你快速了解 Python 字符串
  5. python判断某年是否为闰年_python如何判断某年是否是闰年_后端开发
  6. 删除android电视软件下载,安卓智能电视必装工具没有之一,进程管理备份清理全靠它!...
  7. 2016-2017-2 20155117实验二《Java面向对象程序设计》实验报告
  8. java 监测文件夹_实时监测文件夹中新增的文件和文件夹(java)
  9. 字体在ppt中可以整体替换吗_制作PPT必备的6个技巧,个个让人相见恨晚!你确定不来学一学?...
  10. 4.1 Python图像的图像恢复-空域噪声滤波器
  11. [爬虫系列(三)]用多线程爬取百度贴吧默认表情
  12. css之sticky定位
  13. 2021-11-12 (2018 CCPC 吉林站)
  14. DHCP 解决单位网络私接路由器的办法
  15. 应届生,你为什么那么想做产品经理
  16. SeedLab10: Linux Firewall Exploration Lab
  17. css实现波浪球效果图,用css实现圆形波浪效果图
  18. 香港电讯:1天内完成100+个商店部署,骨干网覆盖全球3,000+城市!
  19. 收集的有意思的网站--各种奇葩欢乐
  20. 现实世界充满了bug_现实世界充满了哪些bug

热门文章

  1. 微信开发生成带参数的二维码的讲解
  2. 将IDEA上面写的代码上传到gitee仓库保姆式教程
  3. 手动删除oem 13c EM REPOSITORY 数据库
  4. 呵护身体10个部位的最佳食物!
  5. qywechat.class.php,wechat-php-sdk/qywechat.class.php at master · xzw/wechat-php-sdk · GitHub
  6. input框不能输入的几种方式
  7. 【Android App】实战项目之实现你问我答的智能语音机器人(超详细 附源码和演示视频)
  8. t420i升级固态硬盘提升_电脑升级固态硬盘,速度还不够快?这些设置你一定没做好...
  9. Docker swarm Docker stack
  10. java 企业版_下列版本中哪个是Java 企业版