mybatis一对多的配置

基本配置与onetoone的类似,不同的是一对多用到了两个新的标签
这里写图片描述
下面是一个一对多的例子:

<!--方式一: 嵌套结果: 使用嵌套结果映射来处理重复的联合结果的子集
SELECT * FROM class c, teacher t,student s WHERE c.teacher_id=t.t_id AND c.C_id=s.class_id AND  c.c_id=1
-->
<select id="getClass3" parameterType="int" resultMap="ClassResultMap3">
select  *  from  class  c,  teacher  t,student  s  where  c.teacher_id=t.t_id  and  c.C_id=s.class_id  and
c.c_id=#{id}
</select>
<resultMap type="_Classes" id="ClassResultMap3">
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
<association property="teacher" column="teacher_id" javaType="_Teacher">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
</association>
<!-- ofType 指定 students 集合中的对象类型 -->
<collection property="students" ofType="_Student">
<id property="id" column="s_id"/>
<result property="name" column="s_name"/>
</collection>
</resultMap>
<!--方式二:嵌套查询:通过执行另外一个 SQL 映射语句来返回预期的复杂类型
SELECT * FROM class WHERE c_id=1;
SELECT * FROM teacher WHERE t_id=1  //1 是上一个查询得到的 teacher_id 的值
SELECT * FROM student WHERE class_id=1  //1 是第一个查询得到的 c_id 字段的值
-->
<select id="getClass4" parameterType="int" resultMap="ClassResultMap4">
select * from class where c_id=#{id}
</select>
<resultMap type="_Classes" id="ClassResultMap4">
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
<association  property="teacher"  column="teacher_id"  javaType="_Teacher"
select="getTeacher2"></association>
<collection property="students" ofType="_Student" column="c_id" select="getStudent"></collection>
</resultMap>
<select id="getTeacher2" parameterType="int" resultType="_Teacher">
SELECT t_id id, t_name name FROM teacher WHERE t_id=#{id}
</select>
<select id="getStudent" parameterType="int" resultType="_Student">
SELECT s_id id, s_name name FROM student WHERE class_id=#{id}
</select>

sql映射文件一定要记得到conf.xml中注册,有设置别名的记得到到conf.xml里设置

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设我们有两个,一个是 `order` ,一个是 `order_item` ,每个订单可能有多个订单项。下面是 MyBatis 配置文件的代码示例: 首先,我们需要定义两个对应的实体 `Order` 和 `OrderItem`: ```java public class Order { private int id; private String orderNo; private List<OrderItem> orderItems; // getters and setters } public class OrderItem { private int id; private String itemName; private int orderId; // getters and setters } ``` 然后,我们需要在 MyBatis 的映射文件定义 SQL 语句和映射关系。假设我们要查询订单及其所有订单项,我们可以这样写: ```xml <!-- 定义查询订单及其所有订单项的 SQL 语句 --> <select id="selectOrderWithItems" resultMap="orderWithItems"> SELECT o.id, o.order_no, oi.id AS item_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> <!-- 定义结果集映射关系 --> <resultMap id="orderWithItems" type="Order"> <id property="id" column="id"/> <result property="orderNo" column="order_no"/> <!-- 嵌套结果集映射关系 --> <collection property="orderItems" ofType="OrderItem"> <id property="id" column="item_id"/> <result property="itemName" column="item_name"/> </collection> </resultMap> ``` 在这个示例,我们定义了一个名为 `selectOrderWithItems` 的查询语句,它会返回订单及其所有订单项的详细信息。我们使用了 `LEFT JOIN` 操作将订单和订单项连接起来,并使用 `WHERE` 子句限制查询结果只包含指定订单的信息。 接下来,我们定义了一个名为 `orderWithItems` 的结果集映射关系,它指定了如何将查询结果映射到 `Order` 对象和 `OrderItem` 对象。在这个映射关系,我们使用了 `<collection>` 元素嵌套了一个订单项的结果集映射关系,以便将订单项列映射到 `Order` 对象的 `orderItems` 属性。 最后,在 Java 代码调用查询语句并获取结果: ```java public Order selectOrderWithItems(int id) { try (SqlSession sqlSession = sqlSessionFactory.openSession()) { OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class); return orderMapper.selectOrderWithItems(id); } } ``` 在上面的代码,我们使用了 `SqlSession` 对象和 `OrderMapper` 接口来执行查询操作。查询结果会自动映射到 `Order` 对象,包括所有订单项信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值