美文网首页
Mybatis关联查询使用内部类接收

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

作者: 奕为 | 来源:发表于2019-08-22 11:52 被阅读0次

    我们的需求是:查询一个需求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<SboxSet> {
        ReqVo getVo(String reqId);
    }
    

    3.mapper.xml文件配置

        <resultMap id="voMap" type="com.hierway.vslm.domain.stream.ReqVo">
            <id property="reqId" column="req_id"/>
            <collection property="setVo" ofType="com.hierway.vslm.domain.stream.ReqVo$SetVo">
                <id property="setId" column="set_id"/>
            </collection>
        </resultMap>
    <!-- ReqVo getVo(String reqId);-->
        <select id="getVo" resultMap="voMap" parameterType="String">
            select ss.req_id,ss.set_id from sbox_set as ss where req_id = #{reqId}
        </select>
    

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

    4.单元测试

    测试结果

    相关文章

      网友评论

          本文标题:Mybatis关联查询使用内部类接收

          本文链接:https://www.haomeiwen.com/subject/iifnsctx.html