Mybatis关联查询使用内部类接收

我们的需求是:查询一个需求Id下面对应的多个set。
使用关联查询的时候,因为要构造返回结果对象,如果因为一个返回结果对象,就要创建两个java文件的话,那么后面项目也会看起来过于臃肿。那么,今天尝试了一下使用外部类+内部类的方式,进行结果映射。

1.返回结果对象构造

/**
 * @ClassName ReqVo
 * @Description TODO
 * @Date 2019/8/22 11:20
 * @Created by sunyiwei
 */
public class ReqVo implements Serializable {
    private static final long serialVersionUID = -3001162196916396442L;
    
    private String reqId;
    private SetVo setVo;

    public ReqVo() {
    }

    @Override
    public String toString() {
        return "ReqVo{" +
                "reqId='" + reqId + '\'' +
                ", setVo=" + setVo +
                '}';
    }

    static class SetVo{
        private String setId;

        public SetVo() {
        }

        @Override
        public String toString() {
            return "SetVo{" +
                    "setId='" + setId + '\'' +
                    '}';
        }
    }
}

上面的类创建符合javaBean规范,省略了set&get方法,其中内部类使用的是静态内部类,否则会报错,如下所示:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found in com.cheng.test.Outer$Innermatching [java.lang.Integer, java.lang.Int]

2.持久层接口定义

/**
 * @ClassName SboxSetDao
 * @Description TODO
 * @Date 2019/7/18 9:23
 * @Created by sunyiwei
 */
@Repository
public interface SboxSetDao extends MyBaseDao {
    ReqVo getVo(String reqId);
}

3.mapper.xml文件配置

    
        
        
            
        
    

    

配置主要包括resultMap的定义,以及与持久层接口方法名对应的sql元素定义。

4.单元测试

测试结果

你可能感兴趣的:(Mybatis关联查询使用内部类接收)