有一个 java 类;
@Data @Alias("Customer") public class Customer { private String custName; private String address; private List<Order> orderList; }
<select id="getCustomer" resultMap="CustomerAndOrder"> select * from test.orders a, test.customers b where a.cust_id = b.cust_id </select> <resultMap id="CustomerAndOrder" type="Customer"> <result property="custName" column="cust_name"/> <result property="address" column="cust_address"/> <collection property="orderList" ofType="Order"> <result property="orderNum" column="order_num"/> <result property="orderDate" column="order_date"/> </collection> </resultMap>
getCustomer 方法是为了查询每个顾客,都有哪些订单。
执行 getCustomer 方法后,可以看到这个链表查询起到了类似 group by 的作用,以 cust_name 和 cust_address 分组,将每个组内的订单信息弄进了一个集合内。类似于:
select cust_name, cust_address, (select 组内各行的 order_num,order_date into a List) from test.orders a, test.customers b where a.cust_id = b.cust_id group by cust_name, cust_address
大概是上面这个意思,但实际上 mysql 无法做到这种语句。
然后我想问的是:
另外,mybatis 官方文档的这个例子:
<!-- 非常复杂的结果映射 --> <resultMap id="detailedBlogResultMap" type="Blog"> <constructor> <idArg column="blog_id" javaType="int"/> </constructor> <result property="title" column="blog_title"/> <association property="author" javaType="Author"> <id property="id" column="author_id"/> <result property="username" column="author_username"/> <result property="password" column="author_password"/> <result property="email" column="author_email"/> <result property="bio" column="author_bio"/> <result property="favouriteSection" column="author_favourite_section"/> </association> <collection property="posts" ofType="Post"> <id property="id" column="post_id"/> <result property="subject" column="post_subject"/> <association property="author" javaType="Author"/> <collection property="comments" ofType="Comment"> <id property="id" column="comment_id"/> </collection> <collection property="tags" ofType="Tag" > <id property="id" column="tag_id"/> </collection> <discriminator javaType="int" column="draft"> <case value="1" resultType="DraftPost"/> </discriminator> </collection> </resultMap>
是否可以认为其等价 sql 语句是 group by blog_title, author_id, author_username, author_password, author_email, author_bio, author_favourite_section?
![]() | 1 amiwrong123 OP 是我这个问题太低端了吗,还是大家都不喜欢用 mybaits 吗(刚看了隔壁 JPA 和 mybatis 对比贴子~) |
![]() | 2 shaoyijiong 2020-09-27 16:58:02 +08:00 其实是太长了没人想看完 包括我 |
![]() | 3 amiwrong123 OP @shaoyijiong 哈哈哈,好吧。晚上我自己再试试吧。忽略最后的那个例子,其实帖子很短啊[手动笑哭] |