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。如下图所示:
四.解决:
第一种方案:
<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>