Mybatis注解开发 - 字段及集合映射(一对多)

在 MyBatis 中,使用注解进行集合映射的方式与 XML 配置方式类似,需要通过 @Results@Result 注解来定义映射关系。下面是一个具体的示例(想直接看重点的 直跳第二点)。


对于这两个注解的说明:地址 - >MyBatis中常用注解详解 (Results、Result、ResultMap、ResultType、MapKey)_mybatis的result_偏爱星雾缠绕15的博客-CSDN博客


假设有如下查询语句:

SELECT g.id, g.name, u.id user_id, u.name user_name, u.age user_age
FROM group g
LEFT JOIN user u ON u.group_id = g.id

        我们需要将这个查询结果映射成一个 Group 对象列表,其中每个 Group 对象包含一个 User 对象列表,表示该组下所有的用户信息。

1、定义实体类

        首先需要定义 Group 和 User 实体类,并在 Group 类中添加一个 List<User> 类型的属性,表示该组下的所有用户信息。

        例如:

@Data
public class Group {
    private Long id;
    private String name;
    private List<User> users;
}

@Data
public class User {
    private Long id;
    private String name;
    private Integer age;
}

2、定义 Mapper 接口

        接着需要定义一个 Mapper 接口,并在其中定义一个 selectGroups() 方法来执行上述查询操作。同时,还需要使用 @Results@Result 注解来定义映射关系。

        其中,@Results 注解用于定义多个映射关系,@Result 注解用于定义单个映射关系。

        例如:

@Mapper
public interface GroupMapper {
    @Select("SELECT g.id, g.name, u.id user_id, u.name user_name, u.age user_age " +
            "FROM group g LEFT JOIN user u ON u.group_id = g.id")
    @Results({
        @Result(property = "id", column = "id", id = true),
        @Result(property = "name", column = "name"),
        @Result(property = "users", column = "id", 
                many = @Many(select = "com.example.demo.mapper.UserMapper.selectByGroupId"))
    })
    List<Group> selectGroups();
}

        在上面的示例中,我们定义了一个名为 selectGroups() 的方法,并使用 @Select 注解来指定 SQL 查询语句。同时,在该方法中使用了 @Results 注解来定义多个映射关系,其中包括 Group 对象的 id 和 name 属性的映射关系,以及 users 列表属性的映射关系。

        需要注意的是,在使用注解映射集合类型时,需要在 @Results 注解中给出结果集映射的唯一标识符 id,并在 @Result 注解中设置 id = true,以便 MyBatis 可以正确地处理结果集映射。其表示对应的是<id>标签。

对于 users 列表属性的映射关系,我们使用了 @Result 注解来定义单个映射关系,其中 property 属性指定了列表属性的名称,column 属性指定了该属性与查询结果集中哪一列建立映射关系,many 属性则表示该属性与另一张表建立一对多的关联关系,并通过 select 属性指定了查询用户信息的 SQL 语句所在的 Mapper 接口和方法。

        需要注意的是,这里的 select 属性值为 com.example.demo.mapper.UserMapper.selectByGroupId,表示调用 UserMapper 接口中名为 selectByGroupId() 的方法来获取用户信息。

        因此,还需要在 UserMapper 接口中定义一个名为 selectByGroupId() 的方法,用于查询该组下所有用户信息。

3、定义 UserMapper 接口

        接着需要定义 UserMapper 接口,并在其中定义一个 selectByGroupId() 方法来查询属于指定组的所有用户信息。例如:

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE group_id = #{groupId}")
    List<User> selectByGroupId(@Param("groupId") Long groupId);
}

        在上面的示例中,我们定义了一个名为 selectByGroupId() 的方法,并使用 @Select 注解来指定 SQL 查询语句。同时,在参数列表中使用了 @Param 注解来指定方法参数名称和对应的查询条件。


到这里,一个基于注解的 MyBatis 集合映射开发流程就完成了,觉得有用的话,记得点赞+收藏哦,下次不迷路~


猜你喜欢

转载自blog.csdn.net/qq_63029994/article/details/130618183
今日推荐