注解形式怎么查询"一对多","多对多"这样的关联关系?

注解形式怎么查询"一对多","多对多"这样的关联关系?

之前的讲过一对多,多对多的查询。

比如实体类Goods有goodDetails属性

public class Goods {
    private Integer goodsId;
    private String title;
    private String subTitle;
    private Float originalCost;
    private Float currentPrice;
    private Float discount;
    private Integer isFreeDelivery;
    private Integer categoryId;
    private List<GoodDetail> goodDetails;
}

在xml映射文件中还有collection和association标签可以使用

<collection property="goodDetails" select="goodDetail.selectById" column="goods_id"/>

换成注解形式,@Result() 好像只能映射普通的属性,goodDetails属性该怎么写映射?


而且也没有介绍注解形式的批处理。

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,

1、查询一对多和多对多可以使用@Many注解。

以一对多为例,goodDetails属性,参考代码如下:

@Result(column="goods_id",property="goodDetails",many=@Many(select="com.imooc.mybatis.dao.GoodDetailDao.getAllGoodDetailByGoodId",fetchType=FetchType.LAZY))})

2、注解形式的批处理,以批量插入数据为例,

参考代码如下:

http://img1.sycdn.imooc.com//climg/5f1036d80914828703970192.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 慕丝1539783 提问者 #1
    请问fetchType是做什么用的? FetchType.LAZY:懒加载,关联对象不立刻加载(即从数据库读入到内存),在使用到的时候加载。 FetchType.EAGER:急加载,在加载主体对象时,同时加载关联属性对象。 自己查百度的,但是还是没看懂什么意思,能详细说明一下么? 另外,用注解形式的批处理插入,可以返回list中每个对象的主键id,那是不是批处理优先选择注解形式编写代码?
    2020-07-17 17:25:43
好帮手慕阿慧 2020-07-17 17:59:38

同学你好,

1、FetchType.LAZY,在返回的对象,第一次调用getGoodDetails()方法获得商品goodDetails属性的时候,会执行sql语句,查询数据库。即会延迟查询。

FetchType.EAGER是在查询的时候查询商品的goodDetails。不会延迟查询。

2、batchInter方法返回值是void,用注解形式的批处理插入,不会返回每个对象的主键。xml的优先级会高于注解的优先级。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕丝1539783 #1
    因给您给我的代码里有包含 @Options(useGeneratedKeys = true, keyProperty = "gdId") 这个批注我测试了,在批量插入时可以返回主键id给对应的属性。所以我觉得好像批注比xml方式还要强大。
    2020-07-17 21:54:41
  • 好帮手慕阿慧 回复 提问者 慕丝1539783 #2
    同学你好,二者功能基本一样。xml方式也可以返回主键id,需要配置在xml配置。xml和注解是两种不同的实现方式,xml是将sql语句写在一个文件中。注解是将sql语句和Dao代码写在同一个类中。 祝:学习愉快~
    2020-07-18 09:42:32
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师