XML文件中,Mybatis或MybatisPlus查询出的Sql结果未映射到对应得实体类上

一.问题描述:

使用mybatisplus查询表数据的时候,确定sql语句没问题,放在navicat上可以正常查询出结果,但是使用实体类接收的时候,发现对应的实体类字段都是null。

二.表结构:

字段

类型

注释

id

bigint

id

user_name

varchar

名字

user_age

int

年龄

三.错误的写法:

<resultMap id="userVo" type="com.xx.xx.xx.User">
        <id column="id" jdbcType="INTEGER" property="id" />
        <result column="user_name" jdbcType="VARCHAR" property="userName" />
       <result column="user_age " jdbcType="INTEGER" property="userAge" />
    </resultMap>
<select id="findList" resultMap="userVo">
        select
        a.id as id,
        a.user_name as userName,
        a.user_age as userAge
        from user a
    </select>

三.原因:

1如果select标签的属性选择resultMap,那么sql语句中就不用写"as xx" 别名了。

2如果select标签的属性选择resultType,mybatisplus会自动映射,指向具体的实体类。这时需要满足下面三个条件:
①表中的字段要么和实体类字段一致。

②如果表中字段带下划线,实体类中对应的字段不想带下划线,就要满足下划线转驼峰的方式,例如,表中字段product_url,实体类中的字段,要写成productUrl。

③yml文件中,mybatisplus的配置参数,mapUnderscoreToCamelCase参数,要改为true。如下图所示:

mybatis plus 映射postgresql 数组字段成List mybatisplus字段映射不上_sql

四.解决:

第一种方案:
<resultMap id="userVo" type="com.xx.xx.xx.User">
        <id column="id" jdbcType="INTEGER" property="id" />
        <result column="user_name" jdbcType="VARCHAR" property="userName" />
       <result column="user_age " jdbcType="INTEGER" property="userAge" />
    </resultMap>
<select id="findList" resultMap="userVo">
        select
        a.id,
        a.user_name,
        a.user_age
        from user a
    </select>
第二种方案:
<select id="findList" resultType="com.xx.xx.xx.User">
        select
        a.id as id,
        a.user_name as userName,
        a.user_age as userAge
        from user a
    </select>