springboot + mybatis discriminator (鉴别器)使用

springboot + mybatis discriminator (鉴别器)使用

表结构:

mk_discriminatorparent
在这里插入图片描述

mk_discriminatorchildren1
在这里插入图片描述

mk_discriminatorchildren2
在这里插入图片描述

entity:

DiscriminatorParent

public class DiscriminatorParent implements Serializable {

    private Integer id;

    private String message;

    private List<DiscriminatorChildren1> discriminatorChildren1List;

    private List<DiscriminatorChildren2> discriminatorChildren2List;

    get set ......

DiscriminatorChildren1

public class DiscriminatorChildren1 implements Serializable {

    private Integer id;

    private String message;

   set get ......

DiscriminatorChildren2

public class DiscriminatorChildren2 implements Serializable {

    private Integer id;

    private String message;

    get set......
}

mapper:

DiscriminatorParentMapper

@Repository
public interface DiscriminatorParentMapper {

    List<DiscriminatorParent> findAll();
}

DiscriminatorChildren1Mapper

@Repository
public interface DiscriminatorChildren1Mapper {

    List<DiscriminatorChildren1> findByParentId(Integer parentId);
}

DiscriminatorChildren2Mapper

@Repository
public interface DiscriminatorChildren2Mapper {

    List<DiscriminatorChildren2> findByParentId(Integer parentId);
}

mapper.xml:

DiscriminatorParentMapper.xml
这里需要注意 类型为parent类
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.mapper.DiscriminatorParentMapper">

    <resultMap id="discriminatorParentMap" type="discriminatorParent">
        <id column="id" property="id"/>
        <result column="message" property="message"/>
        <discriminator javaType="String" column="message">
            <case value="to discriminatorchildren1" resultMap="discriminatorChildrenMap1"/>
            <!--<case value="to discriminatorchildren1" resultType="discriminatorParent">-->
                <!--<collection property="discriminatorChildren1List" fetchType="eager" column="id" select="com.demo.mapper.DiscriminatorChildren1Mapper.findByParentId"/>-->
            <!--</case>-->
            <case value="to discriminatorchildren2" resultMap="discriminatorChildrenMap2"/>
        </discriminator>
    </resultMap>

    <resultMap id="discriminatorChildrenMap1" type="discriminatorParent">
        <collection fetchType="eager" property="discriminatorChildren1List" column="id" javaType="List" select="com.demo.mapper.DiscriminatorChildren1Mapper.findByParentId"/>
    </resultMap>

    <resultMap id="discriminatorChildrenMap2" type="discriminatorParent">
        <collection fetchType="eager" property="discriminatorChildren1List" column="id" javaType="List" select="com.demo.mapper.DiscriminatorChildren2Mapper.findByParentId"/>
    </resultMap>

    <select id="findAll" resultMap="discriminatorParentMap">
        select * from mk_discriminatorparent;
    </select>

</mapper>

DiscriminatorChildren1Mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.mapper.DiscriminatorChildren1Mapper">


    <select id="findByParentId" resultType="DiscriminatorChildren1" parameterType="Integer">

        select * from mk_discriminatorchildren1 where parent_id = #{parentId}

    </select>

</mapper>

DiscriminatorChildren2Mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.mapper.DiscriminatorChildren2Mapper">


    <select id="findByParentId" resultType="DiscriminatorChildren2" parameterType="Integer">

        select * from mk_discriminatorchildren2 where parent_id = #{parentId}

    </select>

</mapper>

service:

@Service
public class DiscriminatorParentService {

    @Autowired
    DiscriminatorParentMapper discriminatorParentMapper;

    public List<DiscriminatorParent> findAll(){

        return discriminatorParentMapper.findAll();
    }
}

controller:

DiscriminatorController

@RestController
@RequestMapping("dir")
public class DiscriminatorController {

    @Autowired
    DiscriminatorParentService discriminatorParentService;

    @GetMapping("findAll")
    public ResponseEntity findAll(){

        return ResponseEntity.ok(discriminatorParentService.findAll());
    }
}

测试结果:

在这里插入图片描述
注解版

在这里插入图片描述

发布了43 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43866295/article/details/86602246