Mybatis - 如何访问实体类的内部类
有时候一个实体类与另一个实体类进行关联,如一对多、一对一的情况。这时候,因业务需求,可能被关联的实体类不需要所有的字段,而需要根据业务进行裁剪。
这个时候,定义实体类的内部类就可以达到这一目的(至少我是这样做的)。如下代码,我的实体类中拥有一对一、一对多的实体类。我 pojo 包下其实也有一个 Buch 实体类,但是那个实体类的字段和数据库的所有字段对应,远比这个实体类下的内部类字段更多。
file:[src/pojos/BuchCollection.java]
@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 静态的。
file:[resources/mappers/BuchMapper.xml]
<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 标签内,访问实体类的内部类必须要写完整的路径,并通过 $
访问内部类。