利用MyBatis框架进行一对多映射下的CRUD操作
时间: 2024-05-06 14:18:18 浏览: 85
假设有两个实体类,一个是订单(Order),一个是订单项(OrderItem),它们之间是一对多的关系,一个订单可以对应多个订单项。下面是使用MyBatis框架进行一对多映射下的CRUD操作的示例。
1. 创建订单(Order)表和订单项(OrderItem)表,并在数据库中插入数据。
2. 创建Order实体类和OrderItem实体类,其中Order类包含一个List<OrderItem>类型的属性,用于存储与该订单相关联的所有订单项。
```java
public class Order {
private int id;
private String orderNo;
private List<OrderItem> orderItemList;
// getter和setter方法省略
}
public class OrderItem {
private int id;
private String itemName;
private int orderId;
// getter和setter方法省略
}
```
3. 创建OrderMapper.xml文件,配置一对多映射关系。
```xml
<mapper namespace="com.example.mapper.OrderMapper">
<resultMap id="orderMap" type="com.example.entity.Order">
<id property="id" column="id"/>
<result property="orderNo" column="order_no"/>
<collection property="orderItemList" ofType="com.example.entity.OrderItem">
<id property="id" column="id"/>
<result property="itemName" column="item_name"/>
<result property="orderId" column="order_id"/>
</collection>
</resultMap>
<select id="getOrderById" resultMap="orderMap">
SELECT o.id, o.order_no, oi.id, oi.item_name, oi.order_id
FROM orders o
LEFT JOIN order_items oi ON o.id = oi.order_id
WHERE o.id = #{id}
</select>
</mapper>
```
4. 创建OrderMapper接口,并编写查询方法。
```java
public interface OrderMapper {
Order getOrderById(int id);
}
```
5. 在MyBatis配置文件中配置数据源和Mapper接口。
```xml
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_test"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/OrderMapper.xml"/>
</mappers>
</configuration>
```
6. 编写测试类,调用Mapper接口中的方法进行查询。
```java
public class Test {
public static void main(String[] args) {
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Test.class.getClassLoader().getResourceAsStream("mybatis-config.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
Order order = orderMapper.getOrderById(1);
System.out.println(order.getOrderNo());
for (OrderItem orderItem : order.getOrderItemList()) {
System.out.println(orderItem.getItemName());
}
sqlSession.close();
}
}
```
以上就是使用MyBatis框架进行一对多映射下的CRUD操作的示例。在实际开发中,根据需要可以编写Mapper接口的其他方法来实现其他的CRUD操作。
阅读全文