Mybatis一对一、一对多查询

 


 

简单说明Mybatis一对一和一对多查询的使用,首先设计两个表,hero表和kingdom表。

建表SQL

CREATE TABLE `hero`  (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `kingdom_id` int(10) NULL DEFAULT NULL,
  `hero_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `gender` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

DROP TABLE IF EXISTS `kingdom`;
CREATE TABLE `kingdom`  (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `kingdom_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

表数据

对应关系

一对一关系:一个hero(刘备)对应一个kingdom(蜀)。

一对多关系:一个kingdom(蜀) 对应多个hero(刘备、关羽、张飞......)

使用springboot集成Mybatis。

具体代码

Hero.java

    private int id;
    private int kingdom_id;
    private String hero_name;
    private String gender;
    private Kingdom kingdom;

Kingdom.java

    private int id;
    private String kingdom_name;
    List<Hero> list;

Controller.java

    @RequestMapping("hero/{id}")
    public Hero getHeroById(@PathVariable Integer id){
        Hero hero = heroMapper.getHeroById(id);
        return hero;
    }

    @RequestMapping("kingdom/{id}")
    public Kingdom getKingdomById(@PathVariable Integer id){
        Kingdom kingdom = heroMapper.getKingdomById(id);
        return kingdom;
    }

mapper.java

Hero getHeroById(@Param("id") Integer id);
Kingdom getKingdomById(@Param("id") Integer id);

mapper.xml

    <resultMap id="map1" type="com.example.springbootdemo.entity.Hero">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="kingdom_id" column="kingdom_id" jdbcType="INTEGER"/>
        <result property="gender" column="gender" jdbcType="VARCHAR"/>
        <result property="hero_name" column="hero_name" jdbcType="VARCHAR"/>
        <association javaType="com.example.springbootdemo.entity.Kingdom" property="kingdom">
            <result property="kingdom_name" column="kingdom_name" jdbcType="VARCHAR"/>
        </association>
    </resultMap>
    
    <resultMap id="map2" type="com.example.springbootdemo.entity.Kingdom">
        <id property="id" column="id" jdbcType="INTEGER"/>
        <result property="kingdom_name" column="kingdom_name" jdbcType="VARCHAR"/>
        <collection property="list" ofType="com.example.springbootdemo.entity.Hero">
            <result property="kingdom_id" column="kingdom_id" jdbcType="INTEGER"/>
            <result property="hero_name" column="hero_name" jdbcType="VARCHAR"/>
            <result property="gender" column="gender" jdbcType="VARCHAR"/>
        </collection>
    </resultMap>

    <select id="getHeroById" resultMap="map1">
        select * from hero h left join kingdom k on h.kingdom_id = k.id where h.id = #{id}
    </select>

    <select id="getKingdomById" resultMap="map2">
        select * from kingdom k left join hero h on k.id = h.kingdom_id where k.id = #{id}
    </select>

查询结果

http://localhost:8090/kingdom/2

http://localhost:8090/hero/2

猜你喜欢

转载自blog.csdn.net/zh137289/article/details/106650423