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

admin8个月前最新骗局项目72

当使用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来实现批量插入。

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


相关文章

指尖资讯邀请码785082171赚钱技巧

指尖资讯官方邀请下载,该软件是一款阅读新闻或者看视频赚钱软件,新用户注册送1.66元,满10元可提现。指尖资讯官方开发为成都新盛铭仁科技有限公司。20190515反馈:指尖资讯APP不付款,加客服qq...

走圈APP,走路和看新闻赚钱

走圈APP是一款走路计步和看新闻、分享新闻的软件,通过以上活动可获得一定的积分奖励,结合了目前走路赚钱和看新闻赚钱的模式,算是一种创新。20180607反馈:走圈已无现金提现功能,赚的现金只能换东西,...

淘新闻提现页面打不开是怎么回事,提现不了如何解决

淘新闻提现页面打不开是怎么回事,提现不了如何解决

哎,想当年淘新闻App也是看新闻赚零花钱软件里面的一霸,现如今落得一个提现页面打不开的局面,可见老板不好当啊。起初我以为是平台维护或者自己的版本问题,没想到此状态已经持续了许久,网上一搜索,碰见此问题...

淘宝特价版是真是假 怎么开通淘宝特价版

下沉市场战役:阿里推出淘宝特价版.淘宝特价版推出“1元购物节”,拼多多如何面对?淘宝特价版的强劲增长,正给拼多多带来压力。根据易观的数据,淘宝特价版6月MAU环比增速为11.55%,拼多多MAU环比增...

乱石穿空,惊涛拍岸,卷起千堆雪。(穿空 一作:崩云)

大江东去,浪淘尽,千古风流人物。故垒西边,人道是,三国周郎赤壁。乱石穿空,惊涛拍岸,卷起千堆雪。(穿空 一作:崩云)江山如画,一时多少豪杰。遥想公瑾当年,小乔初嫁了,雄姿英发。羽扇纶巾,谈笑间,樯橹灰...

私域流量新玩法:企业微信vs个人微信

企业微信已经服务超过250万家真实企业,活跃用户6000万,涵盖50多个行业。其中,中国500强企业已有80%开通企业微信,每天有超过470万个系统连接在企业微信上。 企业微信vs个人微信:...

发表评论    

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