mybatis两张表关联查询
时间: 2023-11-09 17:54:46 浏览: 53
MyBatis可以通过XML或注解方式实现两张表关联查询。以下示例演示了如何使用XML方式进行关联查询:
假设有两张表:`user`和`order`,它们的结构如下:
```sql
CREATE TABLE user (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
CREATE TABLE order (
id INT PRIMARY KEY,
user_id INT,
product_name VARCHAR(50),
price DECIMAL(10,2),
FOREIGN KEY (user_id) REFERENCES user(id)
);
```
1. 首先,在`UserMapper.xml`中定义一个关联查询的SQL语句:
```xml
<select id="getUserOrders" resultType="User">
SELECT u.id, u.name, u.age, o.id as 'orders.id', o.product_name as 'orders.productName', o.price as 'orders.price'
FROM user u
LEFT JOIN order o ON u.id = o.user_id
WHERE u.id = #{id}
</select>
```
这个SQL语句会查询`user`表和`order`表中的数据,并将它们关联起来。在查询结果中,`user`表的每一行对应着一个`User`对象,而`order`表的每一行对应着一个`Order`对象。由于一行`user`表的数据可能对应多行`order`表的数据,因此需要使用`LEFT JOIN`语句来保证查询结果完整。
2. 在`UserMapper`接口中定义一个方法来调用上述SQL语句:
```java
public interface UserMapper {
User getUserOrders(int id);
}
```
这个方法会返回一个`User`对象,其中包括该用户的基本信息和他的所有订单信息。
3. 在应用程序中调用这个方法:
```java
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserOrders(1);
System.out.println(user.toString());
} finally {
sqlSession.close();
}
```
这段代码会查询`id`为1的用户信息以及他的所有订单信息,并将查询结果打印出来。
注:以上示例中的实体类`User`和`Order`需要手动创建,或者使用MyBatis提供的自动生成工具来生成。