MyBatis一对一增删改查
时间: 2023-07-07 13:06:58 浏览: 77
MyBatis 一对一关系的增删改查,通常需要使用到 MyBatis 的映射文件和对应的 SQL 语句。下面我将介绍一些基本的操作。
假设我们有两个表,一个是用户表(user),另一个是订单表(order),它们之间是一对一的关系,即一个用户只能对应一个订单,一个订单只能对应一个用户。
1. 查询一对一关系
我们可以通过在用户表中添加订单号字段,并使用 JOIN 语句来查询一对一关系。
在映射文件中,我们可以这样写 SQL 语句:
```xml
<select id="getUserWithOrder" parameterType="int" resultMap="userMap">
SELECT u.*, o.order_no, o.order_amount
FROM user u
LEFT JOIN order o ON u.id = o.user_id
WHERE u.id = #{id}
</select>
```
其中,`userMap` 是一个结果集映射,需要在映射文件中定义。定义方式如下:
```xml
<resultMap id="userMap" type="User">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="age" column="age" />
<result property="orderNo" column="order_no" />
<result property="orderAmount" column="order_amount" />
</resultMap>
```
这里的 `User` 是一个 Java Bean,它的属性包括 id、name、age、orderNo 和 orderAmount。
2. 插入一对一关系
我们可以先插入用户信息,再插入订单信息,并在订单信息中添加用户 ID。
在映射文件中,我们可以这样写 SQL 语句:
```xml
<!-- 插入用户信息 -->
<insert id="insertUser" parameterType="User">
INSERT INTO user(name, age) VALUES(#{name}, #{age})
</insert>
<!-- 插入订单信息 -->
<insert id="insertOrder" parameterType="Order">
INSERT INTO order(order_no, order_amount, user_id) VALUES(#{orderNo}, #{orderAmount}, #{user.id})
</insert>
```
这里的 `Order` 是一个 Java Bean,它的属性包括 orderNo、orderAmount 和 user,其中 user 是一个 User 对象,表示订单所属的用户。
在插入订单信息时,我们需要使用 `#{user.id}` 来获取用户的 ID。
3. 更新一对一关系
我们可以根据用户 ID 更新用户信息和订单信息。
在映射文件中,我们可以这样写 SQL 语句:
```xml
<!-- 更新用户信息 -->
<update id="updateUser" parameterType="User">
UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}
</update>
<!-- 更新订单信息 -->
<update id="updateOrder" parameterType="Order">
UPDATE order SET order_no=#{orderNo}, order_amount=#{orderAmount} WHERE user_id=#{user.id}
</update>
```
这里的 `User` 和 `Order` 与上面的定义相同。
在更新订单信息时,我们需要使用 `#{user.id}` 来获取用户的 ID。
4. 删除一对一关系
我们可以根据用户 ID 删除用户信息和订单信息。
在映射文件中,我们可以这样写 SQL 语句:
```xml
<!-- 删除用户信息 -->
<delete id="deleteUser" parameterType="int">
DELETE FROM user WHERE id=#{id}
</delete>
<!-- 删除订单信息 -->
<delete id="deleteOrder" parameterType="int">
DELETE FROM order WHERE user_id=#{id}
</delete>
```
这里的 `id` 表示用户的 ID。
在删除订单信息时,我们需要使用 `user_id` 来获取用户的 ID。
阅读全文