java表关联一对多CRUD,比如商品表,商品标签表,mybatis框架实现,

java表关联一对多CRUD大致思路代码是怎样的,比如商品表,商品标签表,mybatis框架实现,有详细一点的代码学习下更好

图片说明

以查询订单信息,关联查询订单明细信息及用户信息为例。主信息:orders 从信息:orderdetail、user(一个订单对应多个订单详情):
那么sql语句为:
SELECT
orders.id,
orders.user_id,
orders.number,
user.username,
user.sex,
orderdetail.id detailId,
orderdetail.items_id,
orderdetail.items_num
FROM
orders,
USER,
orderdetail
WHERE orders.user_id = user.id
AND orders.id = orderdetail.orders_id

我们可以新建Order的扩展类:
public class OrdersExt extends Orders {
   private User user;//用户信息
private List detailList;//订单明细信息
}

然后在映射文件中:

extends="OrdersAndUserRstMap">
<!-- 订单明细信息(一对多) -->
<!-- collection:映射一对多关系 -->







SELECT
orders.id,
orders.user_id,
orders.number,
user.username,
user.sex,
orderdetail.id detailId,
orderdetail.items_id,
orderdetail.items_num
FROM
orders,
USER,
orderdetail
WHERE
orders.user_id = user.id
AND orders.id = orderdetail.orders_id

映射文件重发:=====================

extends="OrdersAndUserRstMap">
<!-- 订单明细信息(一对多) -->
<!-- collection:映射一对多关系 -->






SELECT
orders.id,
orders.user_id,
orders.number,
user.username,
user.sex,
orderdetail.id detailId,
orderdetail.items_id,
orderdetail.items_num
FROM
orders,
USER,
orderdetail
WHERE
orders.user_id = user.id
AND orders.id = orderdetail.orders_id

 <!-- OrdersAndDetailRstMap -->
<!-- extends:可以继承一个已有的resultMap,指定resultMap的唯一标示即可 -->
<!-- 注意:继承时,只能继承type类型是一样的resultMap -->
<resultMap type="com.itheima.mybatis.po.OrdersExt" id="OrdersAndDetailRstMap"
    extends="OrdersAndUserRstMap">
    <!-- 订单明细信息(一对多) -->
    <!-- collection:映射一对多关系 -->
    <collection property="detailList" ofType="com.itheima.mybatis.po.Orderdetail">
        <id column="detailId" property="id" />
        <result column="items_id" property="itemsId" />
        <result column="items_num" property="itemsNum" />
    </collection>
</resultMap>

<!-- 一对多映射 -->
<select id="findOrdersAndDetailRstMap" resultMap="OrdersAndDetailRstMap">
    SELECT
    orders.`id`,
    orders.`user_id`,
    orders.`number`,
    user.`username`,
    user.`sex`,
    orderdetail.`id` detailId,
    orderdetail.`items_id`,
    orderdetail.`items_num`
    FROM
    orders,
    USER,
    orderdetail
    WHERE
    orders.`user_id` = user.`id`
    AND orders.`id` = orderdetail.`orders_id`
</select>

不对我问题问的有问题,商品和标签应该是多对多,不建立中间表怎么实现呢,

多对多最简单的就是建立中间表,因为有了中间表后你要查询的话,只对中间表进行操作就行了,增删的时候会涉及到其他两个表,但在一般的操作中会通过创建中间表的方式管理多对多的关系,这样只需维护中间表就行了,没必要往这种费力还难实现的方向逼自己,我到现在都没有听过去配置这么难的关系,我在hibernate中见过这种多对多的关系,是配置双向多对多,但是一不小心就配置成停不下来的无限循环,人们都是想怎么简单怎么来,连一对多也要配置成多对一,你倒好,怎么难怎么来,哈哈

图片说明

!表结构就是这样的了图片说明](https://img-ask.csdn.net/upload/201710/19/1508392475_792.png)

UPDATE categories
    SET display_order = CASE id
        WHEN 1 THEN 3
        WHEN 2 THEN 4
        WHEN 3 THEN 5
    END,
    title = CASE id
        WHEN 1 THEN 'New Title 1'
        WHEN 2 THEN 'New Title 2'
        WHEN 3 THEN 'New Title 3'
    END
WHERE id IN (1,2,3)

```没试过sql批量,只试过jdbc批量,写出来一定很刺激

   ArrayList<GoodsTagEntity> list = new ArrayList<>();
            List<String> listgGoodsIds = request.goodsIds;
            for (String goodsId : listgGoodsIds) {
                List<String> listTagIds = request.tagIds;
                for (String tagId : listTagIds) {
                    GoodsTagEntity goodsTagEntity = new GoodsTagEntity();
                    goodsTagEntity.setGoodsId(Integer.parseInt(goodsId));
                    goodsTagEntity.setTagId(Integer.parseInt(tagId));

                    GoodsTagEntity goodsTag = goodsTagService.getGoodsTagById(goodsId, tagId);
                    if (goodsTag == null) {
                        list.add(goodsTagEntity);
                    } else {
                        errorCode = ErrorCode.ERR_ARCHIVES_PARAM.value();
                    }
                }
            }
            response.errorCode = goodsTagService.batchSetGoodsTag(list);


                         <insert id="add" parameterType="java.util.List">
        insert into dt_ec.goods_tag (goods_id,tag_id)
        values
        <foreach collection="list" item="item" index="index"
            separator=",">
            (#{item.goodsId},#{item.tagId})
        </foreach>
    </insert>