mybatis一对多

mybatis一对多

  实际业务中会遇到场景关系描述的需求,一个场景会对应多个节点来具体描述整个场景关系,单个节点会有节点属性信息。

业务需求一:根据场景ID查询整个场景信息

业务需求二:根据场景ID删除整个场景信息

业务需求三:根据场景ID更新整个场景信息

以下创建三个model类,Scenario,Node,Prop。

Scenario类我只写三个字段,剩余字段可以有场景描述,场景创建时间,场景创建者,最新一次更新时间,版本,等等字段,废话不多说,上代码:

@Data
public class Scenario{
    private String scenarioId;
    private String scenarioName;
    List<Node> nodes;
}

Node类,我只写三个字段,剩余字段可以是记录该节点在前端显示的横坐标、纵坐标等等。

@Data
public class Node{
    private String nodeId;
    private String nodeName;
    private String scenarioId;
    List<Prop> props; 
}

Prop类我只写四个字段,剩余字段可以是.......

@Data
public class Prop{
    private String varId;
    private String varName;
    private String varValue;
    private String nodeId;
}

创建接口类,ScenarioDao

@Repository
@Mapper
public interface ScenarioDao{
    Scenario getScenarioAllInfoById{Scenario scenarioId};
}

然后在Mapper xml文件里该如何书写呢,体现一对多的关系。书写Mapper xml之前要先写sql,一对多的sql。

select a.*,b.*c.*
from scenario a
inner join node b
on a.scenarioId = b.scenarioId
inner join node c
on b.nodeId = c.nodeId
and a.scenarioId = '007'

然后就看看xml文件里的内容改怎么写呢?

ScenarioMapper.xml   property="nodes"  ,nodes来源于Scenario类中List<Node>。

前两行省略
<mapper namespace="com.xxx.xxx.xxx.xxx.ScenarioDao">
    <resultMap id = "BaseResultMap" type= "com.xxx.xxx.xxx.xxx.Scenario">
       <result column="SCENARIO_ID" property="scenarioId" jdbcType="VARCHAR"/>
       <result column="SCENARIO_Name" property="scenarioName" jdbcType="VARCHAR"/>
       <collection property="nodes" ofType="com.xxx.xxx.xxx.xxx.Node" resultMap="com.xxx.xxx.xxx.xxx.Node.BaseResultMap"
    </resultMap>

    <select id="getScenarioAllInfoById" parameterType="com.xxx.xxx.xxx.xxx.Scenario" resultMap="BaseResultMap">
        select a.*,b.*c.*
        from scenario a
        inner join node b
        on a.scenario_id = b.scenario_id
        inner join node c
        on b.node_id = c.node_id
        and a.scenario_id =#{scenarioId} 
    </select>

</mapper>

NodeMapper.xml

前两行省略
<mapper namespace="com.xxx.xxx.xxx.xxx.NodeDao">
    <resultMap id = "BaseResultMap" type= "com.xxx.xxx.xxx.xxx.Scenario">
       <result column="NODE_ID" property="nodeId" jdbcType="VARCHAR"/>
       <result column="NODE_Name" property="nodeName" jdbcType="VARCHAR"/>
       <result column="SCENARIO_ID" property="scenarioId" jdbcType="VARCHAR"/>
       <collection property="props" ofType="com.xxx.xxx.xxx.xxx.Prop" resultMap="com.xxx.xxx.xxx.xxx.Prop.BaseResultMap"
    </resultMap>
</mapper>

PropMapper.xml

前两行省略
<mapper namespace="com.xxx.xxx.xxx.xxx.PropDao">
    <resultMap id = "BaseResultMap" type= "com.xxx.xxx.xxx.xxx.Prop">
       <result column="VAR_ID" property="varId" jdbcType="VARCHAR"/>
       <result column="VAR_Name" property="varName" jdbcType="VARCHAR"/>
       <result column="VAR_VALUE" property="varValue" jdbcType="VARCHAR"/>
       <result column="NODE_ID" property="nodeId" jdbcType="VARCHAR"/>
    </resultMap>
</mapper>

如何该实现逻辑业务呢,请看下一篇文章《mybatis一对多业务逻辑实现》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值