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

Posted Himmelbleu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis 访问实体类的内部类,根据业务裁剪实体类的字段相关的知识,希望对你有一定的参考价值。

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

这个时候,定义实体类的内部类就可以达到这一目的(至少我是这样做的)。如下代码,我的实体类中拥有一对一、一对多的实体类。我 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 标签内,访问实体类的内部类必须要写完整的路径,并通过 $ 访问内部类。

以上是关于Mybatis 访问实体类的内部类,根据业务裁剪实体类的字段的主要内容,如果未能解决你的问题,请参考以下文章

Java内部类

三MyBatis映射文件深入

MyBatis---join 查询

MyBatis如何配置实体类和接口类的别名?

mybatis怎么根据id显示两个表的内容连接的小例子都有哪些?

为啥内部类的private变量可被外部类直接访问