
mybatis查询结果为null的解决办法
问题描述
问题:使用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的机制
方案一:
实体类对应数据库表
方案二:
方案三:
<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>
更多推荐
所有评论(0)