Mybatis 访问实体类的内部类,根据业务裁剪实体类的字段

发布时间 2023-06-19 02:30:52作者: Himmelbleu

有时候一个实体类与另一个实体类进行关联,如一对多、一对一的情况。这时候,因业务需求,可能被关联的实体类不需要所有的字段,而需要根据业务进行裁剪。

这个时候,定义实体类的内部类就可以达到这一目的(至少我是这样做的)。如下代码,我的实体类中拥有一对一、一对多的实体类。我 pojo 包下其实也有一个 Buch 实体类,但是那个实体类的字段和数据库的所有字段对应,远比这个实体类下的内部类字段更多。

@Data
public class BuchCollection {

    private int id;
    private String collectDate;
    private Buch buch;
    private Publisher publisher;
    private List<Author> authors;

    @Data
    public static class Buch {
        private int id;
        private String name;
        private String profile;
        private float price;
        private float discount;
        private String cover;
    }

    @Data
    static class Author {
        private String author;
    }

    @Data
    static class Publisher {
        private int id;
        private String name;
    }

}

内部类如果要在其他 java 代码中访问,就必须 public 公开,如果只是用在 mybatis 的 result 结果集映射的时候可以不需要。

!!定义的内部类必须是 static 静态的。

<resultMap id="rs1" type="BuchCollection" autoMapping="true">
    <id column="id" property="id"/>
    <association property="buch" javaType="com.buchstadt.pojo.BuchCollection$Buch" columnPrefix="b_"
                 autoMapping="true"/>
    <association property="publisher" javaType="com.buchstadt.pojo.BuchCollection$Publisher" columnPrefix="p_"
                 autoMapping="true"/>
    <collection property="authors" ofType="com.buchstadt.pojo.BuchCollection$Author" columnPrefix="ba_"
                autoMapping="true"/>
</resultMap>

在 Myabtis 的 xml 标签内,访问实体类的内部类必须要写完整的路径,并通过 $ 访问内部类。