18个 SpringBoot项目中遇到的BUG,你试试 上

简介: 18个 SpringBoot项目中遇到的BUG,你试试 上

1.启动项目的时候报错

1.Error starting ApplicationContext. 
To display the auto-configuration report re-run your application with 'debug' enabled.

解决方法:

在yml配置文件中加入debug: true,因为默认的话是false

2.在集成mybatis时mapper包中的类没被扫描

org.springframework.beans.factory.NoSuchBeanDefinitionException:
 No qualifying bean of type 'com.app.mapper.UserMapper' available: 
expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

解决方法:

在springboot的启动类中加入@MapperScan("mapper类的路径")
或者直接在Mapper类上面添加注解@Mapper,建议使用上面那种,不然每个mapper加个注解也挺麻烦的

3.在向数据库插入数据时报错

"\r\n### Error updating database.  Cause: 
com.mysql.jdbc.MysqlDataTruncation: 
Data truncation: Data too long for column 'password' at row 1\r\n###

数据库表password这个字段太短了,应该设长点

 java.lang.ClassCastException: 
 com.app.entity.User cannot be cast to java.lang.Integer

4.用mybatis查询时报错

org.mybatis.spring.MyBatisSystemException: 
nested exception is org.apache.ibatis.binding.BindingException: 
Parameter 'user_type' not found. Available parameters are [2, 1, 0, param1, param2, param3]

原因:@Param注解缺失,当只有一个参数时,Mapper接口中可以不使用

public User getUser(String name);

有多个参数时就必须使用

public User getUser(@Param("name") String name,@Param("password") String password);

5.Mybatis查询传入一个字符串传参数报错

mapper接口:
PkRecord findByPkStudentNumber(String pkStudentNumber);
对应的mapper配置文件
<select id="findByPkStudentNumber" resultMap="recordMap" >
        SELECT * FROM pk_record
        <where>
            <if test="pkStudentNumber!=null">
                pk_student_number=#{pkStudentNumber}
            </if>
        </where>
    </select>

然后就会报如下错误

There is no getter for property named 'XXX' in 'class java.lang.String'

原因:

Mybatis默认采用ONGL解析参数,所以会自动采用对象树的形式取string.num值,引起报错。

解决方法:

①在mapper配置文件中参数名,都要改成_parameter

<select id="findByPkStudentNumber" resultMap="recordMap" >
        SELECT * FROM pk_record
        <where>
            <if test="_parameter!=null">
                pk_student_number=#{_parameter}
            </if>
        </where>
    </select>

②在mapper接口中用@Param在相关方法说明参数值

PkRecord findByPkStudentNumber(@Param("pkStudentNumber") String pkStudentNumber);

6.mybatis返回值报错

org.apache.ibatis.binding.BindingException: 
Mapper method 'com.hoomsun.mybatis.dao.CostMapperDao.dongtaislq' 
has an unsupported return type: class java.lang.String

dao接口类中对应的方法去掉返回值,用void,例如:

public void dongtaislq(Map map);

7.mybatis中集合与Stirng类型的比较

报错信息

invalid comparison: java.util.ArrayList and java.lang.String

原因:无法比较这两种类型

<if test="categoryIds!=null and categoryIds!=' ' ">
        AND category_id IN
        <foreach collection="categoryIds" item="categoryIds" open="(" separator="," close=")">
            #{categoryIds}
        </foreach>
</if>

在接收list的时候加了判断 list !=' ',引起了集合与Stirng类型的比较,所以报错,将判断条件改为 : list.size >0就可以了

<if test="categoryIds!=null and categoryIds.size>0" >
        AND category_id IN
        <foreach collection="categoryIds" item="categoryIds" open="(" separator="," close=")">
            #{categoryIds}
        </foreach>
</if>

8.保存对象数据进数据库后根据ID查询并返回该对象时为null

<insert id="saveUser" useGeneratedKeys="true" keyColumn="id" >
        insert into user(username,password,nickname) values (#{username},#{password},#{nickname})
</insert>

这样写的话数据可以保存到数据库,没问题,ID也可以自动增长,不过保存后立刻根据ID查询时返回会为null

解决的方法是把keyColumn换成keyProperty就可以了

<insert id="saveUser" useGeneratedKeys="true" keyProperty="id" >
        insert into user(username,password,nickname) values (#{username},#{password},#{nickname})
</insert>

9.idea运行项目时报错

//子容器启动失败
ERROR 8760 --- [cat-startStop-1] org.apache.catalina.core.ContainerBase   : A child container failed during start
//未能启动Tomcat组件
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 
Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]

这里的问题主要是jre环境没选好,可能是由于你之前项目要求改变jre,然后导致之前的项目jre环境也改变了。

idea具有内置tomcat,所以可以不用额外配置tomcat

在idea中点击运行→编辑结构→在配置中选择jre环境

我这里是选用1.8的环境

Paste_Image.png

再次启动项目:

Paste_Image.png

启动成功了

10.mybatis插入数据时默认值不生效

插入语句

<insert id="insert" useGeneratedKeys="true" keyProperty="id">
    insert into mmall_category (id, name, status)
    values (#{id}, #{name},#{status})
  </insert>

对应的mapper

void insert(Category category);

需要传入的是一个对象,假如你在数据库设计时把status设置默认值

在传入对象时只赋值给name,结果你可以发现数据库中status的值是null

这是因为这个对象的其他属性成员你不赋值的话默认为null,并且你在sql语句中#{status},也就是把null赋给了status,但是有时候有需要传status,不能把#{status}去掉,那该怎么办呢?

解决方法:

<insert id="insert" useGeneratedKeys="true" keyProperty="id">
    insert into mmall_category 
      (id, name
        <if test="status != null">
            ,status
        </if>)
    values (#{id}, #{name}
        <if test="status != null">
            ,#{status}
        </if>)
  </insert>

使用mybatis的if test进行值的判断,如果是null的话就不赋值

mybatis的高级结果映射

association – 一个复杂的类型关联;许多结果将包成这种类型

嵌入结果映射 – 结果映射自身的关联,或者参考一个

看起来挺难懂的,看下实例

在resultMap中,有这样的一个映射

<association property="user" column="user_id" select="com.mapper.UserMapper.selectByPrimaryKey"/>

当你用select查询出来对象时想获取userId的值要先获取映射的对象再获取其ID,不然直接获取userId会为空

目录
相关文章
|
Java Maven Android开发
微服务——SpringBoot使用归纳——Spring Boot开发环境搭建和项目启动
本文介绍了Spring Boot开发环境的搭建和项目启动流程。主要内容包括:jdk的配置(IDEA、STS/eclipse设置方法)、Spring Boot工程的构建方式(IDEA快速构建、官方构建工具start.spring.io使用)、maven配置(本地maven路径与阿里云镜像设置)以及编码配置(IDEA和eclipse中的编码设置)。通过这些步骤,帮助开发者顺利完成Spring Boot项目的初始化和运行准备。
1434 0
微服务——SpringBoot使用归纳——Spring Boot开发环境搭建和项目启动
|
前端开发 安全 Java
Spring Boot 便利店销售系统项目分包设计解析
本文深入解析了基于Spring Boot的便利店销售系统分包设计,通过清晰的分层架构(表现层、业务逻辑层、数据访问层等)和模块化设计,提升了代码的可维护性、复用性和扩展性。具体分包结构包括`controller`、`service`、`repository`、`entity`、`dto`、`config`和`util`等模块,职责分明,便于团队协作与功能迭代。该设计为复杂企业级应用开发提供了实践参考。
623 0
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
488 0
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
1558 0
|
JSON 分布式计算 大数据
springboot项目集成大数据第三方dolphinscheduler调度器
springboot项目集成大数据第三方dolphinscheduler调度器
875 3
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
1180 2
|
Java 关系型数据库 MySQL
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
1174 2
|
分布式计算 Java 大数据
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
669 2
|
Java 测试技术 Spring
简单学Spring Boot | 博客项目的测试
本内容介绍了基于Spring Boot的博客项目测试实践,重点在于通过测试驱动开发(TDD)优化服务层代码,提升代码质量和功能可靠性。案例详细展示了如何为PostService类编写测试用例、运行测试并根据反馈优化功能代码,包括两次优化过程。通过TDD流程,确保每项功能经过严格验证,增强代码可维护性与系统稳定性。
494 0
|
存储 Java 数据库连接
简单学Spring Boot | 博客项目的三层架构重构
本案例通过采用三层架构(数据访问层、业务逻辑层、表现层)重构项目,解决了集中式开发导致的代码臃肿问题。各层职责清晰,结合依赖注入实现解耦,提升了系统的可维护性、可测试性和可扩展性,为后续接入真实数据库奠定基础。
941 0