SpringBoot 整合 mybatis,mybatis-Plus 踩过的一些细节坑

不是啥高深的技术,初学小白才会遇到的小坑

前言

​ 先说说最近在公司的实习,接触到公司的框架是 SpirngBoot + Mybatis + Mybatis-Plus 的一个核心框架,在开发的初期,建表后有模板直接生成 Dao、Pojo、Service、ServiceImpl等,基础的增删查改都被帮你写好了,只需要关注业务逻辑,好处就是开发快了,缺点我觉得就是大量的代码冗余,当然能把程序员从最基本的增删查改解放出来我还是非常认同的。正因为如此,很多底层的东西都被屏蔽了,所以最近在自己搭建时实验环境中出现了一些小问题,记录记录。

请细心:注意 mybatis,xml 文件下特殊字符的处理。

​ 最近在学习若依管理系统,我发现若依系统里面的代码无论是规范还是用到的技术来说,都非常值得我这个刚入门的小白学习,然而最近在自己搭建实验环境的时候,根据若依的数据库我建立了一个名为 my-test 的数据库,然后使用 EasyCode 插件的默认模板生成了测试代码,在 XML 文件中出现了无法转移字符的报错:

Error querying database.  Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-category where id = 1' at line 3

​ 联想到最近测试的时候(记不太清了不过大概是这样)使用一个 HashMap 存放了一个键值对 “sort”:"id desc 然后往 mapper.xml 里传,实际运行后发现打印的查询语句中 id desc 根本就没有包含进来,猜测是因为 sort 是关键字,那么这次应该也是关键字

​ 于是尝试用不同的组合测试发现问题就是 “-” 字符,查询语句会出错,问题解决,只需要把 “-” 替换为下划线即可。当你没有系统的学习一个知识,就容易踩坑,区别只是你的排查和学习速度。

classpath:路径的含义

​ 此时在我的 pom.xml 文件中有 mybatismybatis-plus 的依赖,要让框架扫描到 xml文件并且映射到对应的 dao上还是需要进行配置的,按照惯例,我在 application.properties 中如下配置:

mybatis.mapper-locations=classpath:mapper/*.xml

​ 然后就失效了,查询的时候会报 dao 没有找到对应查询语句的 id,其实在引入 mybatis-plus后,正确的配置应当是

mybatis-plus.mapper-locations=classpath:mapper/*.xml

其中的 clssspath 还是值得初学者深究的一个东西。

首先 clssspathclssspath* 的区别:

clssspath代表匹配一个文件

clssspath*这个前缀代表匹配多个文件

SpringBoot 项目中,classpath 代表了项目打包后的根路径,换个说法,当你运行 SpringBoot项目,目录中会多出一个 target 文件,其中的 classes 文件夹就是项目打包的资源文件,因此,当你配置了

mybatis-plus.mapper-locations=classpath:mapper/*.xml

实际上它找到的是 target/classes/mapper/*.xml

入门小白,才学疏浅,若有疏漏,欢迎指出。

本文首次更新时间 2020-04-25

本文最后更新时间 2020-04-25 (若有突破,持续更新)

你可能感兴趣的:(SpringBoot 整合 mybatis,mybatis-Plus 踩过的一些细节坑)