使用java+mybaits技术实现: 订单表和商品表的一对多查询 ,并打印(订单和商品之间关系是多对多关系) 用户表和订单表的一对一查询,并打印(假设一个用户就一个订单
时间: 2023-11-27 19:49:00 浏览: 188
首先,我们需要定义好数据库中订单表、商品表和用户表的结构。假设我们的订单表名为order,包含订单id、订单号、用户id等字段;商品表名为item,包含商品id、商品名称、商品价格等字段;用户表名为user,包含用户id、用户名、用户地址等字段。
一对多查询订单表和商品表,可以使用MyBatis中的关联查询(association和collection标签)来实现。具体步骤如下:
1. 在订单表的实体类Order中定义一个List<Item>类型的属性items,表示一个订单包含多个商品:
```
public class Order {
private int id;
private String orderNo;
private int userId;
private List<Item> items;
// 省略getter和setter方法
}
```
2. 在商品表的实体类Item中定义一个Order类型的属性order,表示一个商品属于一个订单:
```
public class Item {
private int id;
private String name;
private double price;
private Order order;
// 省略getter和setter方法
}
```
3. 在MyBatis的Mapper文件中定义一个关联查询的语句,使用resultMap标签将查询结果映射到Order实体类中:
```
<select id="getOrderWithItems" resultMap="orderMap">
SELECT o.*, i.id AS item_id, i.name AS item_name, i.price AS item_price
FROM `order` o
LEFT JOIN order_item oi ON o.id = oi.order_id
LEFT JOIN item i ON oi.item_id = i.id
</select>
<resultMap id="orderMap" type="Order">
<id property="id" column="id"/>
<result property="orderNo" column="order_no"/>
<result property="userId" column="user_id"/>
<collection property="items" ofType="Item">
<id property="id" column="item_id"/>
<result property="name" column="item_name"/>
<result property="price" column="item_price"/>
</collection>
</resultMap>
```
4. 在Java代码中调用Mapper接口中的方法来执行查询,获取订单和商品的信息:
```
public Order getOrderWithItems(int orderId) {
return orderMapper.getOrderWithItems(orderId);
}
```
这样,我们就可以通过一次查询获取订单和其包含的所有商品的信息了。
对于用户表和订单表的一对一查询,也可以使用MyBatis的关联查询来实现。具体步骤如下:
1. 在用户表的实体类User中定义一个Order类型的属性order,表示一个用户拥有一个订单:
```
public class User {
private int id;
private String name;
private String address;
private Order order;
// 省略getter和setter方法
}
```
2. 在MyBatis的Mapper文件中定义一个关联查询的语句,使用resultMap标签将查询结果映射到User实体类中:
```
<select id="getUserWithOrder" resultMap="userMap">
SELECT u.*, o.id AS order_id, o.order_no, o.user_id
FROM user u
LEFT JOIN `order` o ON u.id = o.user_id
</select>
<resultMap id="userMap" type="User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="address" column="address"/>
<association property="order" ofType="Order">
<id property="id" column="order_id"/>
<result property="orderNo" column="order_no"/>
<result property="userId" column="user_id"/>
</association>
</resultMap>
```
3. 在Java代码中调用Mapper接口中的方法来执行查询,获取用户和其关联的订单信息:
```
public User getUserWithOrder(int userId) {
return userMapper.getUserWithOrder(userId);
}
```
这样,我们就可以通过一次查询获取用户和其关联的订单信息了。
阅读全文