mybatis注解开发一对一
时间: 2023-11-07 14:06:30 浏览: 92
MyBatis 注解开发一对一关系可以使用 `@One` 注解和 `@Result` 注解来实现。
首先,我们需要在父实体类中添加一个子实体类的属性。比如,我们有一个 User 实体类和一个 Order 实体类,它们之间是一对一的关系,那么我们需要在 User 实体类中添加一个 Order 实体类的属性:
```java
public class User {
private Integer id;
private String name;
private Integer age;
private Order order;
// getter和setter方法
}
```
接着,我们需要在 SQL 映射文件中编写 SQL 语句,并使用 `@One` 注解和 `@Result` 注解来映射一对一关系。例如,我们可以这样编写 SQL 语句:
```xml
<select id="getUserById" resultMap="userResultMap">
SELECT u.id, u.name, u.age, o.id AS order_id, o.order_no, o.order_date
FROM user u
LEFT JOIN `order` o ON u.id = o.user_id
WHERE u.id = #{id}
</select>
```
其中,`resultMap` 属性指定了使用哪个结果映射器,我们需要在结果映射器中使用 `@One` 注解和 `@Result` 注解来映射 Order 实体类。例如:
```xml
<resultMap id="userResultMap" type="User">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<one property="order" fetchType="lazy" select="getOrderById"/>
</resultMap>
<resultMap id="orderResultMap" type="Order">
<id column="order_id" property="id"/>
<result column="order_no" property="orderNo"/>
<result column="order_date" property="orderDate"/>
</resultMap>
```
在上面的结果映射器中,我们使用了 `@One` 注解和 `@Result` 注解来映射 Order 实体类。其中,`property` 属性指定了 User 实体类中的 Order 实体类属性名,`fetchType` 属性指定了懒加载方式,`select` 属性指定了查询 Order 实体类的 SQL 语句。
最后,我们需要在 SQL 映射文件中编写查询 Order 实体类的 SQL 语句,并使用 `@ResultMap` 注解来关联两个结果映射器:
```xml
<select id="getOrderById" resultMap="orderResultMap">
SELECT id AS order_id, order_no, order_date
FROM `order`
WHERE id = #{id}
</select>
```
完成上述步骤后,我们就可以使用 MyBatis 注解开发一对一关系了。
阅读全文