zoukankan      html  css  js  c++  java
  • springboot和mybatis及mybatis-plus整合报错解决过程

      我是看见别人的代码中使用了mybatis-plus框架,确实很方便。于是,从零开始搭建一个spirngboot,mybatis-plus框架,期间遇到了几个问题,使用各种方法解决了,加深了对于mp的认知。

    首先使用mp的generator,这其中有两个比较重要的问题,都涉及其原理

    • mp会要求用户输入表名,然后生成相应表的代码,而不是生成所有数据库表的代码,从实现和需求来说,这都是合理的。
    • mp中依赖了前端框架velocity或者freemaker,很多人对此比较陌生,我也是。这些有什用呢?是要生成也页面代码吗?不是的,而是使用其java和xml的语法引擎,完成代码的xml代码和java代码的生成。

      其它是模块名呀,目录选择问题,不懂就选择默认,或者多试几次,不是大问题。

    重点是使用mp中遇到的问题,提供给大家参考

    • 按照mybatis的使用思路,创建mapper相关的文件,在运行起来的时候报错,大概是 create UserMapper.class  bean error,意思就是mapper对象没有创建成功,是什么错呢?

      从原理上理解,mybatis会自动将UserMapper.class, UserMapper.xml生成一个对象呀。怎么去debug?基本只能code review,应为使用的框架,不是业务,没有数据。我们看到的只是问题的表面,如何进一步去定位问题?这就要从mybatis的工作原理出发,mybatis会在编译阶段,将两个文件打包到同一个目录下,于是去target目录看文件,发现他们竟然不在一起,就发现是创建目录的问题,多级目录不能用com.example.mes,而是逐级创建。

    • 程序运行起来后,报 failed to  create 'sqlSessionFactory' or 'sqlTemplate', 即对象创建失败

      其实在早期使用spring框架时,我们手动创建SqlSessionFactory对象的,交给spring托管,为什么这里提示没有创建呢?我百度了一下,发现是pom文件中没有引入mybatis-spring-boot-starter。为什么加上这个就好了呢?我们其实可以打开这个jar包看一下,看到MybatisAutoConfiguration就明白了,是这个类起来作用。这就就是spring和springboot这两个框架在使用上的一个显著差别。

    • 程序运行起来,报Invalid bound statement (not found): com.bt.mapper.UserMapper.listPage

    说实话,这个问题,我们之前可能都遇到过,一般就是userMapper.xml文件中没有写sql语句。但问题是这股方法是BaseMapper的方法,并且是分页方法,这就使问题比较复杂了。明显是BaseMapper的方法没有实现,百度了一圈没有结果。时间也不多了。解铃还须系铃人,还得自己去想怎么解决。起初我以为mp的分页必须要写sql,那怎么办呢?

      将问题降级,我自己在UserMapper中写方法,发现正常。于是说明UserMapper文件没有问题,是BaseMapper问题,但是一时又找不出问题在哪里,怎么办呢?这时就谦虚一点,下载mp官方样例工程,在本地运行,通过比对发现问题。我发现在mp工程中,listPage是没有问题的,说明不需要sql语句,那问题在哪里呢?大概技术pom文件不同吧,复制官方的pom文件,发现即好了。至此问题终于找到了,少了mybatis-plus-boot-starter,如下图所示:

      说明啥,说明mp本身也是需要Configuration,否则不会加载Mybatis-plus相关的对象。

      总结上面的问题,发现大部分都是pom文件的问题,都是引入相应的组件,但是没有starter而报错,这些starter就相当于一个桥梁,架起了springboot和组件的桥梁。那你可能奇怪了,为什么引入redis就没有starter呢?这是因为springboot有一个spring.factory文件,redis已经被收录了,程序编译时发现redis的包就会创建redis-connector对象,我们就可以直接使用了。

      虽然使用原来的工程就不会报错,但是我们还要动手实践,理解原理,要知其然,知其所以然,这样,在遇到问题或改造时就会顺利的多。

    参考资料:

      mybatis-plus官方网站

    Welcome you!
  • 相关阅读:
    接口测试工具postman(一)下载安装说明
    数据库学习(四)with as (补充 nvl 和 count 函数)
    数据库学习(三) sql语句中添加函数 to_char,round,连接符||
    数据库学习(二) case when then else end 的使用
    数据库学习(一) 一些查询语句
    JMeter学习笔记(九) 参数化4--User Variables
    JMeter学习笔记(九) 参数化3--User Defined Variables
    Python重点(进阶篇)
    Python基础篇练习题
    1
  • 原文地址:https://www.cnblogs.com/Robin008/p/14755377.html
Copyright © 2011-2022 走看看