如果我写成这样,那mybatisPlus解析的查询结果列是依赖于前面的返回实体PO呢 还是依赖于入参中的实体PO呢 ?
分析:MyBatis-Plus 解析查询结果列依赖返回实体 PO 还是入参实体 PO。首先,MyBatis-Plus
查询结果映射主要看返回的实体类。执行查询时,会根据返回的实体类字段,结合 @TableField
等注解,确定数据库列映射。入参主要用于条件构造,比如查询条件,不影响结果列解析。例如,返回的 PO
有哪些字段,就按这些字段去映射结果集。入参是查询条件,和结果映射无关。所以,总结:依赖返回的实体 PO 来解析结果列
MyBatis-Plus解析查询结果列 完全依赖于方法定义的返回实体类(即 List<SysAccountPO>
中的 SysAccountPO
),与入参中的实体类(SysAccountReqPO
)无关。具体逻辑如下:
1. 结果映射的核心依据
- 返回实体类的字段:MyBatis-Plus 会扫描返回实体类(如
SysAccountPO
)的字段,结合@TableField
等注解,将数据库查询结果列映射到该实体类的字段上。例如:- 若
SysAccountPO
中有@TableField("user_name") private String userName;
,则 MyBatis-Plus 会将数据库中user_name
列的值映射到userName
字段。
- 若
- 入参的作用:入参(如
SysAccountReqPO
)仅用于拼接查询条件(如WHERE
条件),不参与结果列的映射。它决定“查什么数据”,但不决定“结果如何映射”。
2. 执行流程示例
- 解析返回实体:MyBatis-Plus 先分析
SysAccountPO
的字段,确定需要映射的数据库列(如id
、user_name
等)。 - 生成查询 SQL:结合入参条件(如
SysAccountReqPO
中的查询参数),生成最终的查询 SQL(如SELECT id, user_name... FROM sys_account WHERE ...
)。 - 结果映射:执行 SQL 后,根据
SysAccountPO
的字段定义,将查询结果填充到SysAccountPO
实例中,最终返回List<SysAccountPO>
。
简言之,返回实体类是结果映射的唯一依据,入参仅用于查询条件,两者职责完全分离。
所以你在即使在入参的PO中添加了一个表中没有的属性,那也是不营业查询的结果列的,也就是不会报上面的错误,只有你在返回的结果对象中加上了不对应的字段,此时才会报列不存在的错误