Mybatis配置Mapper踩过的坑
我们在使用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踩过的坑相关推荐
- 关于Redis配置主从复制踩到的坑,主机不显示从机的连接信息
关于Redis配置主从复制踩到的坑!!! 设置单机集群的时候,两台从机都显示连接到主机,但是主机显示连接到的从机数量为0: 主机信息: 从机80: 从机81: 查看从机log日志文件发现错误信息: M ...
- Mybatis配置mapper.xml的三种方式
1.使用package 配置XXXMapper.xml所在的包 <mappers><package name="com.sun.dao"/></map ...
- Unity2020打包安卓时配置环境踩过的坑(JDKSDKNDKGradle详解)
之前的打包环境都是吃现成的, 这次新公司需要自己配置,踩了坑记录一下,以防之后遗忘. 如果是 用Hub管理的项目 可以通过Hub 去下载 安装内置的Open JDK ,SDK 等很方便也稳定. 没有用 ...
- 记录android老项目studio升级3.1+后重新配置gradle踩过的坑
2019独角兽企业重金招聘Python工程师标准>>> // def releaseApkName = 'KGRingeToneV' + defaultConfig.versionN ...
- [转载][AutoCAD二次开发][2017]Autocad2017 ObjectARX 开发 环境配置和踩到的坑
转自 https://www.cnblogs.com/aweffr/p/7510544.html 其中 链接器(Linker)中添加附加依赖目录和附加依赖项 版本号记得改成自己的版本就好 碎碎念 不得 ...
- [AutoCAD二次开发][2017]Autocad2017 ObjectARX 开发 环境配置和踩到的坑
碎碎念 不得不说autocad二次开发的相关资料真的少,大多数还很旧.图书馆里VBA的一本最近出版时间是2006,AutoLisp的2013(还是个十二五规划教材),ObjectARX的书是2014年 ...
- Mybatis配置 mapper
四种方式: 一.用classPath下资源引用 (推荐使用,类文件和mapper文件可以不需要 放在一个文件夹中,xml文件也不会和java文件混合在一起) <mappers> ...
- Linux+Nginx+PHP 宝塔配置GetwayWorker 踩过的坑
1.下载GetwayWorker包:下载workerman及相关应用 把解压好的文件放在服务器上(本人放在了项目里) 2.开始之前请先仔细看GetwayWorker手册:序言 · GatewayWor ...
- 关于idea+mybatis+springcloud+swagger2+Apollo 踩得小坑
关于idea+mybatis+springcloud+swagger2 踩得小坑 在使用动态sql 联用order by 和 limit的时候 可以使用来进行语句的动态拼接 例如插入可选的四个参数 o ...
最新文章
- 电脑怎么分屏2个显示器_程序员一台电脑装2个显示屏?因为专业
- C++实现各种排序算法
- centos 开发php扩展,【PHP扩展】centos给PHP安装扩展
- python字符串_教你快速了解 Python 字符串
- python判断某年是否为闰年_python如何判断某年是否是闰年_后端开发
- 删除android电视软件下载,安卓智能电视必装工具没有之一,进程管理备份清理全靠它!...
- 2016-2017-2 20155117实验二《Java面向对象程序设计》实验报告
- java 监测文件夹_实时监测文件夹中新增的文件和文件夹(java)
- 字体在ppt中可以整体替换吗_制作PPT必备的6个技巧,个个让人相见恨晚!你确定不来学一学?...
- 4.1 Python图像的图像恢复-空域噪声滤波器
- [爬虫系列(三)]用多线程爬取百度贴吧默认表情
- css之sticky定位
- 2021-11-12 (2018 CCPC 吉林站)
- DHCP 解决单位网络私接路由器的办法
- 应届生,你为什么那么想做产品经理
- SeedLab10: Linux Firewall Exploration Lab
- css实现波浪球效果图,用css实现圆形波浪效果图
- 香港电讯:1天内完成100+个商店部署,骨干网覆盖全球3,000+城市!
- 收集的有意思的网站--各种奇葩欢乐
- 现实世界充满了bug_现实世界充满了哪些bug
热门文章
- 微信开发生成带参数的二维码的讲解
- 将IDEA上面写的代码上传到gitee仓库保姆式教程
- 手动删除oem 13c EM REPOSITORY 数据库
- 呵护身体10个部位的最佳食物!
- qywechat.class.php,wechat-php-sdk/qywechat.class.php at master · xzw/wechat-php-sdk · GitHub
- input框不能输入的几种方式
- 【Android App】实战项目之实现你问我答的智能语音机器人(超详细 附源码和演示视频)
- t420i升级固态硬盘提升_电脑升级固态硬盘,速度还不够快?这些设置你一定没做好...
- Docker swarm Docker stack
- java 企业版_下列版本中哪个是Java 企业版