数据库可以查询到全部数据,客户端却有部分数据为null。

发生背景

采用mybatisX-Generator自动生成的entity和maper(com.baomidou.mybatisplus.core.mapper),自己编写的查询和mapper自带的查询方法都无法将部分字段查询出来,相同的sql语句在数据库却可以查询出来。

问题相关代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cy.store.mapper.AddressMapper">
<resultMap id="BaseResultMap" type="com.cy.store.entity.Address">
            <id property="aid" column="aid" jdbcType="INTEGER"/>
            <result property="province_name" column="province_name" jdbcType="VARCHAR"/>
            <result property="province_code" column="province_code" jdbcType="CHAR"/>
            <result property="city_name" column="city_name" jdbcType="VARCHAR"/>
            <result property="city_code" column="city_code" jdbcType="CHAR"/>
            <result property="area_name" column="area_name" jdbcType="VARCHAR"/>
            <result property="area_code" column="area_code" jdbcType="CHAR"/>
            ...............(省略其他属性)
</resultMap>
 <select id="findByAid" resultType="com.cy.store.entity.Address">
        select * from t_address where aid=#{aid}
 </select>
</mapper>

//mapper
package com.cy.store.mapper;
import com.cy.store.entity.Address;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.Date;
import java.util.List;
public interface AddressMapper extends BaseMapper<Address> {

    Address findByAid(Integer aid);
}

//测试
    @Test
    public void findByAid() {
        Address result = addressMapper.findByAid(23);
        System.out.println(result);
数据库部分截图

img

数据库查询结果

img

测试运行结果

img

你这个代码都有问题呀,根本就没有做数据库与实体类映射呀,没有匹配到怎么可能查出来呀?你都写resultMap了,查询却不使用,那你写这个标签还有什么用呢?

img

应该将select标签里的resultType="com.cy.store.entity.Address"换成resultMap="BaseResultMap"
还有不建议你实体类字段名使用像这种的city_name而是用cityName,另外property="city_name"代表实体类字段名,要保持一致property="cityName"

img

resultType换成

<select id="findByAid" resultMap="BaseResultMap">

字符集编码问题,编码不一致无法解析就会自动变成null

在控制台打印sql看一看

mybatis默认使用驼峰命名法,实体类带下划线的字段要按驼峰命名法修改。或者在配置文件中配置关闭驼峰命名法。

<setting name="mapUnderscoreToCamelCase" value="false"/>

没有开启驼峰转换造成的,将实体类Address的省、市、区对应的属性字段改为province_name,province_code,city_name,city_code,area_name,area_code试试,xml文件中的property属性要和实体类对应,望采纳

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632