如何设置Collection<>类型的属性在resultMap中为null?

时间:2017-11-10 16:00:15

标签: mybatis

我有一个如下所示的结果图:

<resultMap id="myMap" type="myEntity">
    <id property="id" column="ID" />
    <result property="name" column="NAME" />
    <collection property="places" ofType="MyPlace" >
        <result property="placeName" column="PLACE_NAME" />
    </collection>
<resultMap>


<select id="mySelectStatement" parameterType="MyQuery" resultMap="myMap">
     ....
</select>

在select语句的传入参数(MyQuery)中,我有一个标志,指示这些地方是应该加入,解决还是遗漏。使用<if test="myFlag" /> 构建这一切都很有效。

现在,我遇到的唯一问题是:当标志指示应该解析地点但是没有与实体连接的地方时,结果集合是空的(到目前为止一直很好)。但是,当标志指示不应解析场所时,结果集合也是空的。

字段“地点”是否为空是不可判定的,因为根本没有地方或因为它们根本没有得到解决。我想要的是一些机制,将字段“places”设置为'null',而不是在决定是否应该解析这些地方的标志设置为false的情况下返回空集合。

编辑: 更多代码可以更好地理解示例

// MyEntity.java
public class MyEntity {
    private int id;
    private String name;
    private List<MyPlace> places;
}

// MyQuery.java
public class MyQuery {
    private boolean myFlag;
    // getter & setter
}

// MyComponent.java
public class MyComponent {
    private MyMapper myMapper;

    public void findByQuery(MyQuery myQuery) {
        List<MyEntity> myEntities = myMapper.mySelectStatement();
        MyEntity firstEntity = myEntities.get(0);
        List<Place> places = firstEntity.getPlaces();
        if(places.isEmpty()) {
            System.out.println("Hm I wonder why they are empty");    
        }
    }

}


// MyMapper.java
public interface MyMapper {
    List<MyEntity> mySelectStatement(MyQuery myQuery);
}

// MyMapper.xml

// result map from above

<select id="mySelectStatement" parameterType="MyQuery" resultMap="myMap">
     SELECT * FROM MY_ENTITY
     <if test="myFlag">
          LEFT OUTER JOIN PLACES ON .....
     </if> 
</select>

还有一些澄清:这一切都在原则上有效。我唯一的问题是我无法区分空集合“地方”是空的,因为表中没有条目和空集合的地方是空的,因为它们不应该首先被解决

我目前的解决方案是在方法调用后检查MyComponent是否传入的查询是否将标志设置为false。如果是这种情况,则将“places”变量手动设置为null。

0 个答案:

没有答案