mybatis用注解实现一对一查询
时间: 2024-05-15 07:16:17 浏览: 14
在 MyBatis 中,使用注解实现一对一查询可以通过 @One 注解来实现。
假设有两个实体类,分别为 User 和 Order,一个 User 可以拥有多个 Order,但一个 Order 只能属于一个 User,它们之间的关系是一对多的关系。
首先,在 User 实体类中添加一个 List<Order> 属性,表示一个 User 拥有多个 Order:
```java
public class User {
private Integer id;
private String name;
private List<Order> orders;
// getter 和 setter 方法
}
```
然后,在 Order 实体类中添加一个 User 属性,表示一个 Order 属于一个 User:
```java
public class Order {
private Integer id;
private String name;
private Double amount;
private User user;
// getter 和 setter 方法
}
```
在 Mapper 接口中,定义一个方法来查询 User 和它的所有 Order:
```java
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
@Results({
@Result(property = "id", column = "id"),
@Result(property = "name", column = "name"),
@Result(property = "orders", column = "id", javaType = List.class, many = @Many(select = "com.example.mapper.OrderMapper.findByUserId"))
})
User findById(@Param("id") Integer id);
}
```
在上面的代码中,@Results 注解用于定义查询结果的映射关系。@Result 注解用于定义一个属性和查询结果中的一个列之间的映射关系。其中,javaType 属性表示该属性的类型;many 属性表示该属性是一个集合类型;select 属性表示查询 Order 的方法。
在 OrderMapper 接口中,定义一个方法来查询某个 User 的所有 Order:
```java
public interface OrderMapper {
@Select("SELECT * FROM `order` WHERE user_id = #{userId}")
List<Order> findByUserId(@Param("userId") Integer userId);
}
```
最后,使用 UserMapper 中的 findById 方法来查询 User 和它的所有 Order:
```java
User user = userMapper.findById(1);
System.out.println(user.getName());
for (Order order : user.getOrders()) {
System.out.println(order.getName());
}
```
以上就是使用注解实现一对一查询的方法。需要注意的是,在使用 @One 注解时,需要指定查询的方法,并且查询的方法需要返回一个对象,而不能返回一个集合。