问题描述

在这里插入图片描述

问题:使用mybatis查询列表,查询结果为null值

原因分析:

mybatis完成结果集resultset对象转换为集合或实体类对象时,实体类的属性名和查询结果列名不一致。

MyBatis查询结果为null的解决办法可以有以下几种方式:

1.检查SQL语句:确保SQL语句正确无误,包括表名、列名、条件等。可以在数据库中手动执行该SQL语句,看是否返回结果。

2.检查数据:确认数据库中是否存在符合查询条件的数据。可以通过执行其他查询语句验证数据是否存在。

3.检查映射配置:检查MyBatis的映射文件或注解配置,确保查询语句与实体类的映射正确。可以检查是否有错误的列名、类型不匹配等问题。

4.检查返回类型:确认查询方法的返回类型是否正确。如果期望返回单个对象,可以使用selectOne方法;如果期望返回多个对象,可以使用selectList方法。

5.使用日志调试:在MyBatis的配置文件中开启日志输出,查看执行的SQL语句和返回结果,以便排查问题。


解决方案:

针对方式3的解决方案:
方案一:实体类属性名以表中列名命名:book_id,book_name
方案二:sql查询结果列名起别名
方案三:select标签的属性resultType更换为resultMap
resuleType指定结果集类型时,按照默认映射规则实现:实体类的属性名和查询结果列名一致
resuleType=“bookInfo”(此处的bookInfo是取的别名,如果没有设置,则是包名+类名)
resultMap自定义结果映射关系,由程序员来指定:哪个列的值映射到哪个属性中
id=“自定义结果集唯一标识MyBookInfo”
type:要配置映射关系的实体类全路径
方案四:mybatis核心配置文件中,开启数据库经典命名a_b自动映射到Java的变量驼峰命名aB的机制

方案一:
实体类
实体类对应数据库表
数据表
方案二:
mapper.xml
方案三:
在这里插入图片描述

<resultMap id="MyBookInfo" type="bookInfo">
        <!--    开始指定    -->
        <!--    主键列指定关系
            column:列名不区分大小写
            property:Java属性名严格区分大小写
            javaType="java.lang.Integer" jdbcType="INTEGER" 可以省略
            -->
        <id column="book_id" property="bookId" javaType="java.lang.Integer" jdbcType="INTEGER"/>
        <!--    非主键列指定关系    -->
        <result column="book_code" property="bookCode"/>
        <result column="book_name" property="bookName"/>
        <result column="book_type" property="bookType"/>
        <result column="book_author" property="bookAuthor"/>
        <result column="publish_press" property="publishPress"/>
        <result column="publish_date" property="publishDate"/>
        <result column="is_borrow" property="isBorrow"/>
</resultMap>

方案四:核心配置文:配在properties下面

<!-- 配置mybatis运行时行为 -->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐