mybatis映射问题!
例:有2张表 tab_a,tab_b映射2个pojo实体分别为a,b; 一对多关系;a 实体中有属性 id, code, name, list,b实体中有属性 id,pid,txt ;
mybatis中通过关联查询 ;mysql : select a.code, b.txt from tab_a as a lefj join tab_b as b on a.id = b.pid 注意查询的字段;
返回到 resultMap 中
mybatis.xml如下
<resultMap id="joinData" type="a">
<result property="code" column="code"/>
<collection property="bList" ofType="com.pojo.b">
<result property="txt " column="txt "/>
</collection>
</resultMap>
MySQL中就查询了某些字段映射到 resultMap 中,但是最终返回会将 a 的 id,name 和 b 的 id 的字段也会显示出来并且为 null,
提问 mybatis 如何 将 不需要查询的字段过滤掉?
在MyBatis中,如果你不想查询某些字段并将它们过滤掉,可以使用和标签来定义一个可重用的查询片段,并在需要的地方引用它。
首先,在你的mapper文件中定义一个标签,例如:
<sql id="baseColumns"> a.id, a.code, a.name </sql>
然后,在你的查询语句中使用标签引用这个片段,并在需要的地方添加其他字段,例如:
<select id="yourQuery" resultMap="joinData"> SELECT <include refid="baseColumns"/>, b.txt FROM tab_a as a LEFT JOIN tab_b as b ON a.id = b.pid </select>
这样,你就只查询了需要的字段,并且不会返回不需要的字段。
如果是返回json,可以在你b类上加一个 @JsonInclude(JsonInclude.Include.NON_NULL) 注解,为空的字段就不会返回
不知道你这个问题是否已经解决, 如果还没有解决的话:在MyBatis中,可以使用动态SQL的方式来判断并过滤掉不需要查询的字段。下面是具体的解决方案:
<if>
标签来判断字段是否需要查询,并使用<include>
标签来包含需要查询的字段,如下所示:<resultMap id="myResultMap" type="a">
<if test="code != null">
<result property="code" column="code"/>
</if>
<if test="txt != null">
<result property="txt" column="txt"/>
</if>
<!-- 其他需要查询的字段 -->
</resultMap>
在这个示例中,如果code
或txt
为null,标签内的内容将不会包含在最终的查询结果中。
<select>
标签来定义关联查询的SQL语句,并在调用时传入需要查询的字段,如下所示:<select id="getItems" resultMap="myResultMap">
SELECT
<include refid="columnList" />
FROM tab_a AS a
LEFT JOIN tab_b AS b ON a.id = b.pid
</select>
<sql id="columnList">
<if test="needCode">
a.code,
</if>
<if test="needTxt">
b.txt,
</if>
<!-- 其他需要查询的字段 -->
</sql>
在这个示例中,使用了<sql>
标签定义了一个名为columnList
的SQL片段,通过传入needCode
和needTxt
参数来决定是否包含code
和txt
字段。然后在<select>
标签中使用<include>
标签引用了该片段。
public List<MyEntity> getItems(boolean needCode, boolean needTxt) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("needCode", needCode);
paramMap.put("needTxt", needTxt);
return sqlSession.selectList("getItems", paramMap);
}
在这个示例中,定义了一个getItems
方法来调用查询方法,并传入了needCode
和needTxt
参数来决定是否需要查询对应的字段。
通过以上的步骤,就可以在MyBatis中过滤掉不需要查询的字段,避免它们显示为null在查询结果中。如果还有其他问题,请随时提问。
你选的返回类型是你写的joinData,我表示深刻的怀疑