简单说明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>