mybatis怎么一对多
时间: 2023-11-26 12:42:56 浏览: 103
Mybatis中一对多关系的处理可以通过嵌套结果映射来实现。首先,在映射文件中定义两个实体类的映射,可以使用<resultMap>标签进行定义。然后,在一的一方的映射中使用<collection>标签来配置多的一方的映射。
具体步骤如下:
1. 在一的一方的映射文件中,使用<resultMap>标签定义一对多关系的映射,使用<collection>标签配置多的一方的映射。在<collection>标签中,使用<id>标签定义多的一方的主键,并使用<result>标签定义多的一方的其他属性。
2. 在多的一方的映射文件中,使用<resultMap>标签定义多的一方的映射,使用<association>标签定义一的一方的映射。在<association>标签中,使用<id>标签定义一的一方的主键,并使用<result>标签定义一的一方的其他属性。
3. 在一的一方的Mapper接口中定义查询方法,使用@Results注解配置返回结果集的映射。在@Results注解中,使用@Result注解配置一对多关系的映射。
4. 在多的一方的实体类中定义一个集合属性,用来存储多的一方的对象。
5. 在SQL语句中使用LEFT JOIN关联查询一的一方和多的一方的数据,并使用GROUP BY关键字分组。
示例代码如下:
``` java
// 一的一方的Mapper接口
public interface PersonMapper {
@Select("SELECT * FROM person")
@Results({
@Result(property = "id", column = "id"),
@Result(property = "name", column = "name"),
@Result(property = "phones", column = "id", javaType = List.class, many = @Many(select = "com.example.PhoneMapper.selectByPersonId"))
})
List<Person> selectAll();
}
// 多的一方的Mapper接口
public interface PhoneMapper {
@Select("SELECT * FROM phone WHERE person_id = #{personId}")
List<Phone> selectByPersonId(Long personId);
}
// 一的一方的实体类
public class Person {
private Long id;
private String name;
private List<Phone> phones;
// 省略getter和setter方法
}
// 多的一方的实体类
public class Phone {
private Long id;
private String number;
// 省略getter和setter方法
}
```
阅读全文