mybatis里处理查询一对多和多对一,如果换成插入是不是一样的,能不能用XXXMapper.xml对比一下,有什么区别?

admin9个月前最新骗局项目75

当使用MyBatis处理一对多和多对一的查询时,我们通常会使用关联映射(association)和集合映射(collection)来表示关系。相应地,在处理插入操作时,我们可以使用嵌套映射(nested)来插入相关的数据。

下面是一个使用MyBatis处理一对多查询和插入的示例,同时展示了XXXMapper.xml在查询和插入操作中的区别。

首先,假设我们有两个实体类:OrderItem,它们之间存在一对多关系,一个订单可以包含多个商品项。

Order.java(订单实体类):

复制javapublic class Order {    private Integer id;    private String orderNo;    private List<Item> items;    
    // 省略构造方法、getter和setter}

Item.java(商品项实体类):

复制javapublic class Item {    private Integer id;    private String itemName;    private Integer orderId;    
    // 省略构造方法、getter和setter}
  1. 查询一对多关系

OrderMapper.xml中的关联映射(association)和集合映射(collection):

复制xml<!-- 查询订单及其商品项列表 --><select id="getOrderWithItems" resultMap="orderResultMap">
    SELECT o.id, o.order_no, i.id AS item_id, i.item_name, i.order_id
    FROM orders o
    LEFT JOIN items i ON o.id = i.order_id
    WHERE o.id = #{orderId}</select><!-- 定义结果映射 --><resultMap id="orderResultMap" type="com.example.model.Order">
    <id property="id" column="id" />
    <result property="orderNo" column="order_no" />
    <collection property="items" ofType="com.example.model.Item">
        <id property="id" column="item_id" />
        <result property="itemName" column="item_name" />
        <result property="orderId" column="order_id" />
    </collection></resultMap>

OrderMapper.java:

复制javapublic interface OrderMapper {
    Order getOrderWithItems(Integer orderId);
}
  1. 插入一对多关系

OrderMapper.xml中的嵌套映射(nested):

复制xml<!-- 插入订单及其商品项列表 --><insert id="insertOrderWithItems" parameterType="com.example.model.Order">
    INSERT INTO orders (order_no) VALUES (#{orderNo})    <foreach collection="items" item="item" separator=";">
        INSERT INTO items (item_name, order_id) VALUES (#{item.itemName}, LAST_INSERT_ID())    </foreach></insert>

OrderMapper.java:

复制javapublic interface OrderMapper {    void insertOrderWithItems(Order order);
}

在上述示例中,查询一对多关系使用了关联映射(association)和集合映射(collection)来定义结果映射,并在getOrderWithItems方法中使用resultMap来映射查询结果。

插入一对多关系使用了嵌套映射(nested)来实现插入操作,并在insertOrderWithItems方法中定义了嵌套的插入语句。

需要注意的是,查询和插入操作的XML配置中存在一些差异。查询操作使用了resultMap定义结果映射,而插入操作使用了parameterType来指定参数的类型,并在SQL语句中使用了foreach来实现批量插入。

希望以上示例对你有所帮助。如有任何问题,请随时提问。


相关文章

咪咕音乐怎么取消自动续费?

咪咕音乐怎么取消自动续费?

  1.首先在手机微信里搜索“中国移动10086”。  2.接着发送“咪咕音乐”文字。  3.然后即可进入到增值业务。  4.最后找到“咪咕”选项,选择“退订”选项就能停止续费。...

法院冻结社交电商未来集市金融账号 ,它还有“未来”吗?

根据中国互联网协会发布的《2019中国社交电商行业发展报告》:2019年社交电商保持高速增长,预计市场规模达20605.8亿元,同比增长高达63.2%。2019年社交电商消费者人数已达5.12亿人。2...

刷宝短视频邀请码,刷宝短视频真的是看视频就可以挣钱吗?

刷宝短视频邀请码,刷宝短视频真的是看视频就可以挣钱吗?

很多在玩刷宝短视频APP的小伙伴,都想要获得刷宝短视频的邀请码,使用邀请码可以赚取更多的奖励哦!那么今天小编就为大家带来了刷宝短视频的邀请码分享,有需要的小伙伴们快来跟小编一起看看吧!刷宝邀请码U8F...

趣输入邀请码374241337赚钱技巧

趣输入官方下载,由北京猎豹网络科技有限公司开发,是一款打字赚钱输入法软件,平时QQ或者微信聊天打字都可设置趣输入,满10元可提现。20190622反馈:趣输入APP现在提现不到账,官方开发的QQ也解散...

东小店到底是怎么回事?东小店和芬香哪个好?

外交电子商务途径一片红海的今日,怎样崭露头角?这是当下许多人困惑的问题,途径是趋势,但是作为创业者,该何去何从,选择什么样的赛道?这是一个比较头疼的问题。在早年的时间里,淘宝、运营的都是公域流量,但微...

66铃声邀请码1D338AD975DA,好友看视频3天得10元

66铃声邀请码1D338AD975DA,好友看视频3天得10元

66铃声邀请码1D338AD975DA,填写邀请码得一元     第一步下载到本地相册_淘宝天猫优惠券,比66铃声更赚钱   &n...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。