用java写一个多表关联的mapper.xml
时间: 2023-05-28 16:03:05 浏览: 97
假设我们有两个表:user和order,其中user表的主键是id,order表的外键是user_id,下面是一个多表关联的mapper.xml的例子:
```
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserOrderMapper">
<resultMap id="userMap" type="com.example.entity.User">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="age" column="age" />
</resultMap>
<resultMap id="orderMap" type="com.example.entity.Order">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="price" column="price" />
<result property="user_id" column="user_id" />
</resultMap>
<select id="getUserById" resultMap="userMap">
SELECT id, name, age
FROM user
WHERE id = #{id}
</select>
<select id="getOrdersByUserId" resultMap="orderMap">
SELECT id, name, price, user_id
FROM order
WHERE user_id = #{userId}
</select>
<select id="getUserWithOrdersById" resultMap="userMap">
SELECT u.id, u.name, u.age, o.id as order_id, o.name as order_name, o.price
FROM user u
INNER JOIN order o ON u.id = o.user_id
WHERE u.id = #{id}
</select>
</mapper>
```
这个mapper.xml定义了三个select语句:
- getUserById:根据用户id查询用户信息;
- getOrdersByUserId:根据用户id查询该用户的所有订单信息;
- getUserWithOrdersById:根据用户id查询该用户信息及其所有订单信息。
其中,getUserWithOrdersById是多表关联的查询语句,使用了INNER JOIN语句连接了user和order表,并在结果集中返回了用户信息和订单信息。需要注意的是,为了避免结果集中出现重复的字段名,我们给order表中的id和name字段取了别名order_id和order_name。此外,我们在结果集中也返回了订单的user_id字段,以便后续关联查询时使用。
阅读全文